其他分享
首页 > 其他分享> > 在Android 9中获取来电显示

在Android 9中获取来电显示

作者:互联网

我一直在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版本< = API 27中,一切正常 我还在清单文件中添加了READ_PHONE_STATE和READ_CALL_LOG权限. 有任何想法吗?还有其他人遇到同样的问题吗? 在此先感谢您的帮助.

解决方法:

我找到了问题的答案:

首先,在Android 9中,您必须在运行时明确要求READ_PHONE_STATE和READ_CALL_LOG权限.在以前的Android版本中,您只需要请求READ_PHONE_STATE权限.必须在运行时询问它们.

其次,如果同时给出了上述两个权限,则调用onReceive方法两次(!!).意图第一次“空”(EXTRA_INCOMING_NUMBER为空).第二次意图正常填充应该.这在TelephonyManager Documentation中有记录.

标签:android-9-0-pie,android,broadcastreceiver,caller-id
来源: https://codeday.me/bug/20191005/1857017.html