不同版本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