java - Oreo 上的短信广播接收器

标签 java android

我有一个 SMS 监听器,它在 Oreo (API 26) 之前的版本中运行良好,但在 API 26 中似乎被忽略。根据文档,SMS_RECEIVED_ACTION 不受隐式广播限制 ( link ) 的约束,因此不需要进行任何更改。

这是我的听众:

public class SmsListener extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        (...)
    }
}

我的 list 上有这个:

<receiver android:name=".communication.SmsListener"
    android:permission="android.permission.BROADCAST_SMS">
    <intent-filter android:priority="1000">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

并设置权限

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

尝试过不同的示例项目,例如 this同样,结果是相同的,API 26 中没有捕获任何短信。

有人可以为我提供一个工作示例或帮助我确定是否需要更改某些内容或者 API 26 中是否存在错误?

最佳答案

仅在 manifest.xml 中提供权限是不够的,我必须为运行时权限请求添加代码。

将此代码添加到您的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 documentation for runtime permissions

参见BroadcastReceiver SMS_Received not working on new devices , Broadcast Receivers not working in Android 6.0 Marshmallow

关于java - Oreo 上的短信广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678283/

相关文章:

java - 如何从 java 扫描器获取文件中的位置(字节位置)?

java - 从文件转换 UTF-8 读取 unicode 行

java - 如何在 Akka Classic 中向 Actor 的 parent 发送消息?

android - 如何自定义微调框?

Java 按顺序迭代并打印多个数组

java - 禁用日历事件移动 - Vaadin

android - 如何限制 Google App Engine Endpoints API 仅访问我的 Android 应用程序?

java - 将 mp3 导入 android eclipse 失败

javascript - 如何在epub3文件中添加在线图像?

Android Canvas.drawPicture 不适用于带有 Ice Cream Sandwich 的设备