【发布时间】:2019-01-31 06:06:05
【问题描述】:
我一直在BroadcastReceiver 中使用以下代码来获取
来电的来电号码:
@Override
public void onReceive(Context aContext, Intent aIntent) {
String action = aIntent.getAction();
if (action==null) return;
if (!action.equals("android.intent.action.PHONE_STATE")) return;
String curState = aIntent.getStringExtra(TelephonyManager.EXTRA_STATE);
if ((TelephonyManager.EXTRA_STATE_RINGING.equals(curState))
&&(TelephonyManager.EXTRA_STATE_IDLE.equals(oldState)))){
String incNumber = aIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
// do something here
}
oldState=curState;
}
不幸的是,这已停止在 Android 9.0 (API 28) 中工作。进一步来说,
aIntent.getStringExtra(EXTRA_INCOMING_NUMBER) 总是返回 null。在 android versions<=API 27 中一切正常
我还在清单文件中添加了READ_PHONE_STATE 和READ_CALL_LOG 权限。
有什么想法吗?还有其他人遇到同样的问题吗?
提前感谢您的帮助。
【问题讨论】:
-
先生发布 logcat 错误
-
您好,没有 logcat 错误。代码接缝正常执行,但 incNumber 变量始终包含 null。
-
对我来说,它在 Android9 上始终为空。有人吗?
-
你有什么解决办法吗?我在运行时请求了这两个权限。仍然 incomingNumber 为空。
-
@GreenROBO - 抱歉延迟回复 - 请参阅下面的答案(以及答案下方的 cmets...)。
标签: android broadcastreceiver android-9.0-pie caller-id