在Android targetSdkVersion 31 中,TelephonyManager 的 listen 方法被修改以只能接收通过 registerCallback 注册的回调。如果直接使用 listen 方法,则会抛出 SecurityException 异常。
解决办法是使用 registerTelephonyCallback 方法注册回调。以下是代码示例:
TelephonyManager telephonyManager = getSystemService(TelephonyManager.class);
TelephonyCallback telephonyCallback = new TelephonyCallback();
telephonyManager.registerTelephonyCallback(Executors.newSingleThreadExecutor(), telephonyCallback);
其中,TelephonyCallback 是你自己实现的类,需要继承 TelephonyCallback 类,例如:
private class TelephonyCallback extends TelephonyCallback.Callback {
@Override
public void onCallStateChanged(int state, @Nullable String phoneNumber) {
super.onCallStateChanged(state, phoneNumber);
// 处理电话状态改变的逻辑
}
}
在 TelephonyCallback 类中实现需要处理的方法即可。