0

I have been using these code to receive sms in actual device android 4.2 and it was working fine, Now I came to know about new permission module so this code in android 7 nougat not working for me.

public class sms extends BroadcastReceiver {
  public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    if (bundle != null) {
        Object[] smsExtra = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[smsExtra.length];

        for (int i = 0; i < msgs.length; i++) {
            SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
            String body = sms.getMessageBody().toString();
            String sender = sms.getOriginatingAddress().toString();
            Toast.makeText(context, "From :"+sender+"\n"+"body:"+body, Toast.LENGTH_LONG).show();


        }
    }
}

}

I found this about marshmallow that there is run time permission required, But i don't get it how and where to add it in my code so that it work in Nougat and below apis.

// in manifest.xml

  <uses-permission android:name="android.permission.RECEIVE_SMS" />
Wasim K. Memon
  • 5,979
  • 4
  • 40
  • 55
f2k
  • 99
  • 11

2 Answers2

3

try this to read sms permisson runtime

requestSmsPermission();

private void requestSmsPermission() {
    String permission = Manifest.permission.READ_SMS;
    int grant = ContextCompat.checkSelfPermission(this, permission);
    if (grant != PackageManager.PERMISSION_GRANTED) {
        String[] permission_list = new String[1];
        permission_list[0] = permission;
        ActivityCompat.requestPermissions(this, permission_list, 1);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                                            Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();


        } else {
            Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
        }
    }

}
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
0
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.messagebox);


    if (!CheckPermission(MessageBox.this, Manifest.permission.READ_SMS)) {

        RequestPermission(MessageBox.this, Manifest.permission.READ_SMS, REQUEST_RUNTIME_PERMISSION);

    }
}

@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
                //createApplicationFolder();
            } 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;
    }
}
Brandon Minnick
  • 13,342
  • 15
  • 65
  • 123
Rehan
  • 39
  • 9