Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oreo上的SMS广播接收器_Java_Android - Fatal编程技术网

Java Oreo上的SMS广播接收器

Java Oreo上的SMS广播接收器,java,android,Java,Android,我有一个SMS侦听器,它在Oreo(API 26)之前的版本中运行良好,但在API 26中似乎被忽略了。根据文档,SMS\u RECEIVED\u ACTION不受隐式广播限制(),因此不需要更改 这是我的听众: public class SmsListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { (...)

我有一个SMS侦听器,它在Oreo(API 26)之前的版本中运行良好,但在API 26中似乎被忽略了。根据文档,
SMS\u RECEIVED\u ACTION
不受隐式广播限制(),因此不需要更改

这是我的听众:

public class SmsListener extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        (...)
    }
}
我在舱单上有:

<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>

同样,结果也是一样的,API 26中没有捕获SMS


有人能给我提供一个工作示例,或者帮我弄清楚我是否必须更改某些内容,或者API 26中是否存在错误?

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

将此代码添加到您的
main活动中

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:priority=“1000”
导致问题。 在文档中找到以下内容:

该值必须是整数,例如“100”。数字越高,优先级越高。默认值为0。该值必须大于-1000且小于1000


来源:

这与API 23中引入的更改有关,我已经正确处理了这些更改(具有运行时权限请求)。我遇到的问题与API 26中关于广播接收器限制的新更改有关。我在emulator和device中都尝试过。你能寄给我一个样本项目吗?我会用一个干净的项目再试一次。你会让你知道结果的。这不是答案。我设置了android:priority=“999”。BroadcastReceiver sms receiver在应用程序在前台运行时触发。但当应用程序进入后台或手机屏幕处于关闭状态时,它不会触发。您是否请求运行时权限?文档已更改,不再显示最大数量。
@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");
    }
}