如何在 中正确注册BroadcastReceiver传入短信Activity?在清单中注册它不起作用,大概是由于 API 级别 26 中引入的后台执行限制。
所需的权限在清单中:
<uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission>
<uses-permission android:name="android.permission.READ_SMS"> </uses-permission>
<uses-permission android:name="android.permission.SEND_SMS"> </uses-permission>
以及 Receiver 条目:
<receiver android:name=".SmsReceiver" android:exported="true">
<intent-filter>
<action android:name= "android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
接收器类:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context," test sucessfull",Toast.LENGTH_LONG).show();
}
}
我也在运行时请求了许可:
public void getPermission() {
if (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.RECEIVE_SMS},
My_Permission);
}
}
但即使在 an 中动态注册 ReceiverActivity也不起作用:
sr = new SmsReceiver(); // Broadcast receiver
IntentFilter iff = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(sr, iff);