Java Oreo上的SMS广播接收器
我有一个SMS侦听器,它在Oreo(API 26)之前的版本中运行良好,但在API 26中似乎被忽略了。根据文档,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\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");
}
}