关于phone的知识小结

一. phone 状态的获取和判断(监听 来电、接听、挂断、拨打电话)

 用一个类实现PhoneStateListener如:
     class MyPhoneStateListener extends PhoneStateListener {
         @Override
     public void onCallStateChanged(int state, String incomingNumber) {
              switch (state) {
         case TelephonyManager.CALL_STATE_IDLE: // 空闲  
             Log.e(TAG, " 电话空闲");
             mIsInCalling = false;
             break;
         case TelephonyManager.CALL_STATE_RINGING: // 来电
             Log.e(TAG, "来电");
             mIsInCalling = false;
             break;
         case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机(正在拨号及通话中等状态)
                 Log.e(TAG, "正在通话中");
             mIsInCalling = true;
             break;
        }
    }


    }

二. 上述做法可以监听到,电话某个时间的电话处于什么状态,但是我们思考一个问题,我们现在需要判断电话是否处于接通(正在通话状态),我们要用怎么做呢,有人会说可以监听 CALL_STATE_OFFHOOK 这个状态,但是很遗憾, 我们发现,这个状态包含了正在通话和拨号这两个动作,也就是说我们通过上述做法没有办法准确的知道电话是否正在通话中。
     看来我们需要另寻方法了,用下面的做法就可以满足我们的需求:
     ITelephony mPhone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
    boolean isIdle = mPhone.isIdle(); //当isIdle为true时表示没有在通话,为false时表示正在通话中。


三. android4.4中,实现拨号动作
     Intent intent = new Intent("android.intent.action.CALL_PRIVILEGED", Uri.parse("tel:" + mPhoneNum));
     需要 android.permission.CALL_PRIVILEGED 权限
     //这个intent是跳到拨号界面
     Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + mPhoneNum));
     需要 android.permission.CALL_PHONE 权限
    //这个intent是跳到拨号盘界面,即不能直接拨号,得在拨号盘中点击拨号键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值