我一直在使用以下代码在 BroadcastReceiver
中获取来电的呼叫者ID:
@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版本<=API 27中,一切正常
我还在清单文件中添加了READ_PHONE_STATE
和READ_CALL_LOG
权限。
有什么想法吗? 还有其他人遇到同样的问题吗?