在Android 9中获取来电显示

在Android 9中获取来电显示,第1张

概述我一直在BroadcastReceiver中使用以下代码来获取来电的来电显示:@OverridepublicvoidonReceive(ContextaContext,IntentaIntent){Stringaction=aIntent.getAction();if(action==null)return;if(!action.equals("android.intent.action.PHONE_STATE"))

我一直在broadcastReceiver中使用以下代码来获取
来电的来电显示:

@OverrIDepublic 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中获取来电显示全部内容,希望文章能够帮你解决在Android 9中获取来电显示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1098073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存