监听拨打电话(静态注册) 踩过的坑

【1】 监听 拨打电话 的状态: 挂断(空闲) --》 接听 --》 挂断
【注意】

public class PhoneReceiver extends BroadcastReceiver {

private int mOldState;
private int mCurrentState;
private boolean isSend = true;

@Override
public void onReceive(Context context, Intent intent) {

    // 如果是去电
    if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {

            Log.e("lee","去电======================================");
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Service.TELEPHONY_SERVICE);
            tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    }
}


// 设置一个监听器
PhoneStateListener listener = new PhoneStateListener() {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        // 注意,方法必须写在super方法后面,否则incomingNumber无法获取到值。
        super.onCallStateChanged(state, incomingNumber);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                mOldState = TelephonyManager.CALL_STATE_IDLE;
                Log.v("lee", "挂断");
                // ToastUtil.showToast("挂断");

                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // ToastUtil.showToast("接听");
                Log.v("lee", "接听");

                mCurrentState = TelephonyManager.CALL_STATE_OFFHOOK;

                break;
            case TelephonyManager.CALL_STATE_RINGING:
                // ToastUtil.showToast("响铃:来电号码" + incomingNumber); // 输出来电号码
                Log.v("lee", "响铃:来电号码" + incomingNumber);
                break;
                default:
                    break;
        }

 // 注意 不要在onCallStateChanged()方法 做逻辑判断, 因为可能会别调用多次。
        if(mOldState == TelephonyManager.CALL_STATE_IDLE &&
                mCurrentState == TelephonyManager.CALL_STATE_OFFHOOK){
            mOldState  =  -1;
            mCurrentState = -1;
            if( isSend){
                isSend  = false;
                // todo  具体逻辑
            }else if( isSend){
                isSend  = false;
               // todo   具体逻辑

            }else if( isSend){
                isSend  = false;
               // todo   具体逻辑

            }
        }
    }
};

}

【2】注册 广播接收者

   <receiver android:name="com.vest.receiver.PhoneReceiver">
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,124评论 19 139
  • 【Android 广播】 BroadcastReceiver简介 BroadcastReceiver(广播接收器)...
    Rtia阅读 8,804评论 1 17
  • Android中的广播 广播接受器,可以比喻成收音机。而广播则可以看成电台。 Android系统内部相当于已经有一...
    sunhaiyu阅读 8,499评论 1 0
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情况下的生命周期:在用户参与的情况下...
    AndroidMaster阅读 8,296评论 0 8
  • 在吴教授和各位老师及后勤老师的带领下,在《曹全碑》学习班已经学习十四天了,从开始的紧张心情(就像各位老师说的战战兢...
    养正二班张森淼爸爸张清坡阅读 2,299评论 0 0

友情链接更多精彩内容