0

我有一个应用程序可以根据黑名单检查来电的电话号码。

我已经为几个版本的 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,第二次是实际电话号码。

这是一个错误吗?它应该是这样的吗?你在你的应用程序中得到同样的结果吗?

4

0 回答 0