I am using a broadcastReceiver to listen SMS received even when app is not running. It is working fine on Kitkat even app is removed from recent Apps, But not on Lollipop and higher devices.
In Manifest It is defined like this.
<receiver
android:name=".receivers.MxSMSReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="5822">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.SMS_SENT" />
</intent-filter>
</receiver>
Receiver code:
public class MxSMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED") || intent.getAction().equals("android.provider.Telephony.SMS_SENT")) {
}
}
}
I don't know what is the problem. Any help is appreciated
Full working demo Runtime Permissions
Change the permission name which you want to get at runtime.
private String permission = Manifest.permission.RECEIVE_SMS;
Those permssions which you want to get at runtime should also be declared in manifest too.
public class MainActivity extends AppCompatActivity {
private Context context;
private Button button;
private static final int REQUEST_RUNTIME_PERMISSION = 123;
private String permission = Manifest.permission.RECEIVE_SMS;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (CheckPermission(MainActivity.this, permission)) {
// you have permission go ahead
YouCanReadContactNow();
} else {
// you do not have permission go request runtime permissions
RequestPermission(MainActivity.this, permission, REQUEST_RUNTIME_PERMISSION);
}
}
});
}
private void YouCanReadContactNow() {
}
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {
switch (permsRequestCode) {
case REQUEST_RUNTIME_PERMISSION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// you have permission go ahead
YouCanReadContactNow();
} else {
// you do not have permission show toast.
}
return;
}
}
}
public void RequestPermission(Activity thisActivity, String Permission, int Code) {
if (ContextCompat.checkSelfPermission(thisActivity,
Permission)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Permission)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Permission},
Code);
}
}
}
public boolean CheckPermission(Context context, String Permission) {
if (ContextCompat.checkSelfPermission(context,
Permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
}
layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="horizontal">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_margin="10dp"
android:text="Request contact permissions"
android:textSize="20dp" />
</RelativeLayout>