How do I properly register a BroadcastReceiver for incoming SMS in an Activity? Registering it in the manifest is not working, presumably due to Background Execution Limits introduced in API level 26.
The required permissions are in the manifest:
<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>
As well as the Receiver entry:
<receiver android:name=".SmsReceiver" android:exported="true">
<intent-filter>
<action android:name= "android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
The Receiver class:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context," test sucessfull",Toast.LENGTH_LONG).show();
}
}
I have requested permission at runtime, too:
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);
}
}
But even registering the Receiver dynamically in an Activity is not working:
sr = new SmsReceiver(); // Broadcast receiver
IntentFilter iff = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(sr, iff);