欢迎来到 安卓源码空间!
安卓源码空间

                             不同版本Android通话状态监听


 

        之前写的一个app在安卓12上启动报错,需要监听通话状态,网上也没有找到资料,只能慢慢啃安卓的官方文档,最终解决问题。内容简单明了,有完整源码。


注:本文章中的源码都是都是在Service中实现的



· 安卓12之前,SDK<=30


添加监听



TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
MyPhoneStateListener listener = new MyPhoneStateListener();
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
监听类

private class MyPhoneStateListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String phoneNumber) {
            switch (state){
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG, "手机状态:空闲状态");
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG, "手机状态:来电话状态");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG, "手机状态:接电话状态");
                    break;
            }
            super.onCallStateChanged(state, phoneNumber);
        }
    }


· 安卓12+,SDK>=31


添加监听

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
MyCallStateListener listener = new MyCallStateListener();
telephonyManager.registerTelephonyCallback(this.getMainExecutor(), listener);
监听类

    private class MyCallStateListener extends TelephonyCallback implements TelephonyCallback.CallStateListener {
        @Override
        public void onCallStateChanged(int state) {
            switch (state){
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG, "手机状态:空闲状态");
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG, "手机状态:来电话状态");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG, "手机状态:接电话状态");
                    break;
            }
        }
    }
· 整合后的代码
public class TelephonyManagerService extends Service {
    
    @Override
    public void onCreate() {
        super.onCreate();
 
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            //android12以上
            MyCallStateListener listener = new MyCallStateListener();
            telephonyManager.registerTelephonyCallback(this.getMainExecutor(), listener);
        }else{
            MyPhoneStateListener listener = new MyPhoneStateListener();
            telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }
 
    @RequiresApi(api = Build.VERSION_CODES.S)
    private class MyCallStateListener extends TelephonyCallback implements TelephonyCallback.CallStateListener {
        @Override
        public void onCallStateChanged(int state) {
            switch (state){
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG, "手机状态:空闲状态");
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG, "手机状态:来电话状态");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG, "手机状态:接电话状态");
                    break;
            }
        }
    }
 
    private class MyPhoneStateListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String phoneNumber) {
            switch (state){
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG, "手机状态:空闲状态");
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG, "手机状态:来电话状态");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG, "手机状态:接电话状态");
                    break;
            }
            super.onCallStateChanged(state, phoneNumber);
        }
    }
 
    ... 略
 
}


文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_46933199/article/details/126821812

copyright@ 2020-2028  安卓源码空间网版权所有   

备案号:豫ICP备2023034476号-1号