android–BroadcastReceiver SMS_Received无法在新设备上运行

android–BroadcastReceiver SMS_Received无法在新设备上运行,第1张

概述在经历了几个资源和问题后,我仍然面临检测传入SMS消息的问题.下面的代码显示了基础知识:显示ToastonReceive的广播接收器类publicclassIncomingSmsextendsBroadcastReceiver{publicvoidonReceive(Contextcontext,Intentintent){Toast.makeText(contex

在经历了几个资源和问题后,我仍然面临检测传入SMS消息的问题.

下面的代码显示了基础知识:

显示Toast onReceive的广播接收器类

public class IncomingSms extends broadcastReceiver {    public voID onReceive(Context context, Intent intent) {        Toast.makeText(context, "something received", Toast.LENGTH_SHORT).show();    }}

简单清单,注册接收者和权限

<application    <receiver         androID:name=".IncomingSms"        androID:permission="androID.permission.broADCAST_SMS"        androID:exported="true">        <intent-filter androID:priority="2147483647" >            <action androID:name="androID.provIDer.Telephony.SMS_RECEIVED" />        </intent-filter>    </receiver></application><uses-permission androID:name="androID.permission.RECEIVE_SMS" /><uses-permission androID:name="androID.permission.READ_SMS" /><uses-permission androID:name="androID.permission.SEND_SMS" />

上面的代码声明并注册接收器,并具有适当的权限.此外,优先级设置为MAX_INT或2147483647.

我的设备是Nexus 6P,安装了默认的Messenger应用程序(我也尝试过环聊).该应用程序仍然不显示我的祝酒词.尝试使用较旧的三星设备后,正确打印了祝酒词.

优先问题

我在6P上安装了一个名为Manifest VIEwer的应用程序,它允许我查看设备上安装的应用程序的manifest.xml.我检查了Messenger和Hangouts的清单,为SMS标签的接收者,并发现他们两个也指定优先级2147483647.似乎这两个信使应用程序最大优先级,并且一旦他们消费该消息,他们不允许其他应用程序进行干预.请注意,这些是Google应用程序的库存,而不是第三方.

在这一点上,我很困惑:

>他们为什么要这样做?
>如何绕过它?

非常感谢

解决方法:

好的,问题解决了.
问题不在于优先事项,而是我的手机是Nexus 6P(a.k.a.API 23).

仅在manifest.xml中提供权限是不够的,我不得不为运行时权限请求添加代码.见Android documentation for runtime permissions

将此代码添加到您的MainActiviy:

ActivityCompat.requestPermissions(this,             new String[]{Manifest.permission.RECEIVE_SMS},            MY_PERMISSIONS_REQUEST_SMS_RECEIVE);

在MainActivity类的顶部定义它:

private int MY_PERMISSIONS_REQUEST_SMS_RECEIVE = 10;

并添加此覆盖:

@OverrIDepublic voID onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    if (requestCode == MY_PERMISSIONS_REQUEST_SMS_RECEIVE) {        // YES!!        Log.i("TAG", "MY_PERMISSIONS_REQUEST_SMS_RECEIVE --> YES");    }}
总结

以上是内存溢出为你收集整理的android – BroadcastReceiver SMS_Received无法在新设备上运行全部内容,希望文章能够帮你解决android – BroadcastReceiver SMS_Received无法在新设备上运行所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1102499.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存