免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2240 | 回复: 0
打印 上一主题 下一主题

Android-通话状态的判断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 01:27 |只看该作者 |倒序浏览
1. 如何判断手机是否处于正在通话中?(任何时候都可以判断手机是否处于通过中)
  1. private boolean phoneIsInUse() {
  2.      boolean phoneInUse = false;
  3.      try {
  4.      ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
  5.      if (phone != null) phoneInUse = !phone.isIdle();
  6.      } catch (RemoteException e) {
  7.      Log.w(TAG, "phone.isIdle() failed", e);
  8.      }
  9.      return phoneInUse;
  10.     }

2.通话状态的判断(需要注册监听以后,才可以判断手机通话状态的改变,可能连续接收到同一个状态的改变)

  1. package cn.com.chenzheng_java;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.telephony.PhoneStateListener;
  5. import android.telephony.TelephonyManager;
  6. import android.widget.TextView;
  7. /**
  8.  *
  9.  * @author
  10.  * @description 通过该实例,我们可以看到,如果我们想要监听电话的拨打状况,需要这么几步
  11.  * 第一:获取电话服务管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
  12.  * 第二:通过TelephonyManager注册我们要监听的电话状态改变事件。manager.listen(new MyPhoneStateListener(),
  13.  *          PhoneStateListener.LISTEN_CALL_STATE);这里的PhoneStateListener.LISTEN_CALL_STATE就是我们想要
  14.  *         监听的状态改变事件,初次之外,还有很多其他事件哦。
  15.  * 第三步:通过extends PhoneStateListener来定制自己的规则。将其对象传递给第二步作为参数
  16.  * 第四步:这一步很重要,那就是给应用添加权限。android.permission.READ_PHONE_STATE
  17.  *
  18.  *
  19.  */
  20. public class PhoneCallStateActivity extends Activity {
  21.     TelephonyManager manager ;
  22.     String result = "监听电话状态:/n";
  23.      TextView textView ;
  24.     @Override
  25.     public void onCreate(Bundle savedInstanceState) {
  26.         super.onCreate(savedInstanceState);
  27.         setContentView(R.layout.main);
  28.         //获取电话服务
  29.         manager = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
  30.         // 手动注册对PhoneStateListener中的listen_call_state状态进行监听
  31.         manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
  32.         
  33.         textView = (TextView) findViewById(R.id.textView1);
  34.         textView.setText(result);
  35.     }
  36.    /***
  37.     * 继承PhoneStateListener类,我们可以重新其内部的各种监听方法
  38.     *然后通过手机状态改变时,系统自动触发这些方法来实现我们想要的功能
  39.     */
  40.     class MyPhoneStateListener extends PhoneStateListener{

  41.         @Override
  42.         public void onCallStateChanged(int state, String incomingNumber) {
  43.             switch (state) {
  44.             case TelephonyManager.CALL_STATE_IDLE:
  45.                 result+=" 手机空闲起来了 ";
  46.                 break;
  47.             case TelephonyManager.CALL_STATE_RINGING:
  48.                 result+=" 手机铃声响了,来电号码:"+incomingNumber;
  49.                 break;
  50.             case TelephonyManager.CALL_STATE_OFFHOOK:
  51.                 result+=" 电话被挂起了 ";
  52.             default:
  53.                 break;
  54.             }
  55.             textView.setText(result);
  56.             super.onCallStateChanged(state, incomingNumber);
  57.         }
  58.         
  59.     }
  60.     
  61.     
  62. }

这里一定要注意,别忘记给应用注册权限:

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP