В Android 6 и выше, определяющих разрешение в манифесте, недостаточно, вам нужно запросить разрешение во время выполнения.
Вы можете использовать эту функцию в своем классе активности:
final int REQ_PERMISSION_SMS = 1;
private void requestSmsPermission() {
String permission = Manifest.permission.RECEIVE_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, REQ_PERMISSION_SMS);
}
}
А также вы можете добавить следующий обратный вызов для проверки того, позволяет ли пользователь получать SMS или нет:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case REQ_PERMISSION_SMS: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//user allow you to recieve sms
} else {
//user don't allow you to recieve sms
}
}
}
}