gpt4 book ai didi

android - BroadcastReceiver SMS_Received 不适用于新设备

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:23 27 4
gpt4 key购买 nike

在查看了多个资源和问题后,我仍然面临检测传入 SMS 消息的问题。

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

在接收时显示 toast 的广播接收器类

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

带有注册接收器和权限的简单 list

<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 应用程序(我也试过环聊)。该应用程序仍然不显示我的 toast 。在较旧的三星设备上试用后, toast 打印正确。

优先级问题

我在 6P 上安装了一个名为 Manifest Viewer 的应用程序,它允许我查看我设备上安装的应用程序的 manifest.xml。我检查了 Messenger 和 Hangouts 的 manifests,对于 SMS 标签的接收者,发现它们都指定了 2147483647 的优先级。似乎这两个 Messenger 应用程序都最大化了优先级,并且一旦他们使用消息,他们不允许其他应用程序干预。请注意,这些是现有的 Google 应用,而不是第 3 方。

在这一点上,我很困惑:

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

非常感谢

最佳答案

好的,问题解决了。问题不在于优先级,而在于我的手机是 Nexus 6P(又名 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;

同时添加这个覆盖:

@Override
public 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 不适用于新设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970142/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com