我有一个应用程序可以根据黑名单检查来电的电话号码。
我已经为几个版本的 Android 使用了以下代码来获取来电的电话号码,但是当我针对 Android P 对其进行测试时,它的行为出乎意料。
为了便于阅读,我从下面的代码中删除了所有空检查。
public class IncomingCallHandler extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) {
String phoneNumber = bundle
.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
}
}
}
在低于 P 的 Android 版本上,状态为 EXTRA_STATE_RINGING 的 onReceive 可能会在来电期间被多次调用,但 phoneNumber 始终具有相同的值(实际来电号码)。
在 Android P 上,onReceive 在来电期间被调用两次。第一次phoneNumber=null,第二次是实际电话号码。
这是一个错误吗?它应该是这样的吗?你在你的应用程序中得到同样的结果吗?