- 论坛徽章:
- 0
|
android电话处理
与电话相关权限
拨打电话
android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码
通话权限
android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界面
读取电话状态
android.permission.READ_PHONE_STATE,访问电话状态
修改电话状态
android.permission.MODIFY_PHONE_STATE,修改电话状态,如飞行模式,但不包 替换系统拨号器界面
处理拨出电话
android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话
AndroidManifest.xml
Xml代码- 1.<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 2.<uses-permission android:name="android.permission.CALL_PHONE" />
- 3.<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- 4.<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
复制代码 扩展阅读:android权限大全
----------------------------------------------------------------
Android在电话状态改变是会发送
action为android.intent.action.PHONE_STATE的广播
而拨打电话时会发送
action为android.intent.action.NEW_OUTGOING_CALL的广播
例如:
Java代码- 1.IntentFilter filter = new IntentFilter();
- 2.filter.addAction("android.intent.action.NEW_OUTGOING_CALL");
- 3.filter.addAction("android.intent.action.PHONE_STATE");
复制代码 -------------------------------------------------
去电时:
* 未接:phone_state=OFFHOOK;
* 挂断:phone_state=IDLE
* 来电时: *
* 未接:phone_state=RINGING
* 已接:phone_state=OFFHOOK;
* 挂断:phone_state=IDLE
-------------------------------------------
JAVA代码
Java代码- 1.public class PhoneCallReceiver extends BaseReceiver {
- 2./**
- 3.//拨打电话判断及获取号码
- 4.if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
- 5.
- 6.String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
- 7.*/
- 8.
- 9. @Override
- 10. public void onReceive(Context context, Intent intent) {
- 11.
- 12. String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
- 13. /*去电时:
- 14. * 未接:phone_state=OFFHOOK;
- 15. * 挂断:phone_state=IDLE
- 16. * 来电时: *
- 17. * 未接:phone_state=RINGING
- 18. * 已接:phone_state=OFFHOOK;
- 19. * 挂断:phone_state=IDLE**/
- 20. System.out.println("phone_state======"+phone_state);
- 21. String incoming_number = intent.getStringExtra("incoming_number");
- 22.//String incoming_number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER );
- 23. String outgoing_number = intent.getStringExtra("android.intent.extra.PHONE_NUMBER");
- 24. System.out.println("incoming_number======"+incoming_number);
- 25. System.out.println("outgoing_number======"+outgoing_number);
- 26. //去电设值
- 27. if(outgoing_number!=null && outgoing_number.length()>0){
- 28. System.out.println("去电号码"+outgoing_number);
- 29.
- 30. }
- 31. //来电设值
- 32. if(incoming_number!=null && incoming_number.length()>0){
- 33. System.out.println("来电号码"+incoming_number);
- 34. }
- 35.
- 36. if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(phone_state) || TelephonyManager.EXTRA_STATE_RINGING.equals(phone_state))
- 37. {
- 38. System.out.println("去电话未接或来电未接及来电已接");
- 39.
- 40. }
- 41. if (TelephonyManager.EXTRA_STATE_IDLE.equals(phone_state))
- 42. {
- 43. System.out.println("电话已挂断");
- 44. }
- 45. return;
- 46. }
- 47.
- 48.}
-
复制代码 参考文章:
Android之TelephonyManager使用
Android 电话状态的监听(来电和去电) |
|