Как получать смс в Android API 25 (Nougat)

Я использовал этот код для получения смс на реальном устройстве Android 4.2, и он работал нормально. Теперь я узнал о новом модуле разрешений, поэтому этот код в Android 7 Nougat не работает для меня.

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();


        }
    }
}

}

Я нашел это о зефире, что требуется разрешение во время выполнения, но я не получить его, как и где добавить его в моем коде, чтобы он работал в Nougat и ниже apis.

// в манифесте.xml

  <uses-permission android:name="android.permission.RECEIVE_SMS" />

person f2k    schedule 09.06.2017    source источник
comment
вы добавили разрешение во время выполнения   -  person AskNilesh    schedule 09.06.2017
comment
But i did not get it how and where to add it - то надо как-то достать. Найдите Android 6 runtime permissions, и вы найдете сотни руководств о том, как это сделать.   -  person Vladyslav Matviienko    schedule 09.06.2017


Ответы (1)


попробуйте это, чтобы прочитать время выполнения sms permisson

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();
        }
    }

}
person AskNilesh    schedule 09.06.2017
comment
Большое спасибо за положительный ответ, на самом деле, где я сложил, где я могу добавить эти коды .. это класс приема смс или активность в моем случае? Основная активность @Nilesh Rathod - person f2k; 09.06.2017
comment
в вашем классе деятельности - person AskNilesh; 09.06.2017
comment
@f2k спроси меня, если возникнут вопросы - person AskNilesh; 09.06.2017
comment
большое спасибо за то, что вытащил меня из тьмы @Nilesh Rathod - person f2k; 09.06.2017