要监听android打电话和接电话,只需下面2步骤
1.第一步,写一个Receiver继承自BroadcastReceiver

[java] view plain copy print ?
  1. classMyPhoneStateListenerextendsPhoneStateListener{
  2. @Override
  3. publicvoidonCallStateChanged(intstate,StringincomingNumber){
  4. switch(state){
  5. caseTelephonyManager.CALL_STATE_IDLE://空闲
  6. break;
  7. caseTelephonyManager.CALL_STATE_RINGING://来电
  8. break;
  9. caseTelephonyManager.CALL_STATE_OFFHOOK://摘机(正在通话中)
  10. break;
  11. }
  12. }
  13. }
  14. //获取电话通讯服务
  15. TelephonyManagertpm=(TelephonyManager)this
  16. .getSystemService(Context.TELEPHONY_SERVICE);
  17. //创建一个监听对象,监听电话状态改变事件
  18. tpm.listen(newMyPhoneStateListener(),
  19. PhoneStateListener.LISTEN_CALL_STATE);


权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


要监听android打电话和接电话,只需下面2步骤
第一步,写一个Receiver继承自BroadcastReceiver

来电action为TelephonyManager.ACTION_PHONE_STATE_CHANGED

去电action为Intent.ACTION_NEW_OUTGOING_CALL

[java] view plain copy print ?
  1. publicclassPhoneStatReceiverextendsBroadcastReceiver{
  2. privatestaticfinalStringTAG="PhoneStatReceiver";
  3. //privatestaticMyPhoneStateListenerphoneListener=newMyPhoneStateListener();
  4. privatestaticbooleanincomingFlag=false;
  5. privatestaticStringincoming_number=null;
  6. @Override
  7. publicvoidonReceive(Contextcontext,Intentintent){
  8. //如果是拨打电话
  9. if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
  10. incomingFlag=false;
  11. StringphoneNumber=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
  12. Log.i(TAG,"callOUT:"+phoneNumber);
  13. }else{
  14. //如果是来电
  15. TelephonyManagertm=
  16. (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
  17. switch(tm.getCallState()){
  18. caseTelephonyManager.CALL_STATE_RINGING:
  19. incomingFlag=true;//标识当前是来电
  20. incoming_number=intent.getStringExtra("incoming_number");
  21. Log.i(TAG,"RINGING:"+incoming_number);
  22. break;
  23. caseTelephonyManager.CALL_STATE_OFFHOOK:
  24. if(incomingFlag){
  25. Log.i(TAG,"incomingACCEPT:"+incoming_number);
  26. }
  27. break;
  28. caseTelephonyManager.CALL_STATE_IDLE:
  29. if(incomingFlag){
  30. Log.i(TAG,"incomingIDLE");
  31. }
  32. break;
  33. }
  34. }
  35. }
  36. }


第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限。

[html] view plain copy print ?
  1. <receiverandroid:name=".filter.PhoneStatReceiver">
  2. <intent-filter>
  3. <actionandroid:name="android.intent.action.PHONE_STATE"/>
  4. <actionandroid:name="android.intent.action.NEW_OUTGOING_CALL"/>
  5. </intent-filter>
  6. </receiver>
  7. <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission>
  8. <uses-permissionandroid:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>

更多相关文章

  1. Linkify匹配电话号码,Email等
  2. Android 漫游之路------Android电话拨号器(点击事件的几种写法)、A
  3. 根据电话号码查找人名
  4. android 打电话 发送短信
  5. Android调用打电话(Call Phone)
  6. 让EditView只能输入电话号码 同时还是密码形式不让查看
  7. Catalog Service - 解析微软微服务架构实例代码
  8. 介绍一个微软开源项目网站--CodePlex
  9. c语言标识符有哪些

随机推荐

  1. [Android(安卓)Studio]蓝牙通信(Fragment
  2. Android(安卓)Studio相关配置Mac版
  3. [Android] Opengl ES 机型适配 bug 汇总
  4. Android(安卓)Studio 安装完成后,遇到的问
  5. 更改系统时区
  6. Android(安卓)Binder 驱动 - 内核驱动层
  7. Android(安卓)ADB命令详解
  8. Android(安卓)Studio 单元测试之简单版
  9. 关于Activity的少许细节
  10. 简单实现Android绘图板