3

Я пытаюсь реализовать разрешение во время выполнения, но есть несколько проблем, когда FragmentActivity принимает onRequestPermissionResult(). Метод checkPermissions() работает очень хорошо, но onRequestPermissionResult() никогда не вызывается после того, как Пользователь разрешил или запретил разрешения.onRequestPermissionsResult() никогда не вызывается в FragmentActivity

Когда системное диалоговое окно отображается для запроса разрешения, MyActivity.onDestroy() никогда не вызывается. Это относится к этой проблеме?

Я уже пробовал следовать this one и another one, но я думаю, что что-то пропустил.

Мой аппарат Nexus 5X (Android 6.0) и Target SDK версии 23. Минимальная версия поддержка SDK 15. Конечно, я написал необходимые разрешения в AndroidManifest.xml и добавлены библиотеки поддержки V23 в build.gradle.

Это мой код:

public class MyActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     checkPermissions(); 
    } 

    private void checkPermissions(){ 
     String[] dangerousPermissions = { 
       Manifest.permission.READ_PHONE_STATE, 
       Manifest.permission.GET_ACCOUNTS, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE, 
       Manifest.permission.RECORD_AUDIO 
     }; 

     for(String permission : dangerousPermissions){ 
      if (!hasPermission(permission)) { 
       Log.e("permission.debug", "need to grant " + permission); 
       ActivityCompat.requestPermissions(this, dangerousPermissions, 4); 
      } 
     } 
    } 

    public boolean hasPermission(String permission){ 
     return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     Log.d("permission.debug", " request code " + requestCode); 
     for (int i = 0; i < permissions.length; i++) { 
      if (grantResults[i] == 0 && Manifest.permission.READ_PHONE_STATE.equals(permissions[i])) { 
       initiate(); 
      } 
     } 
    } 
} 

Это журнал для моего кода:

E/permission.debug: need to grant android.permission.READ_PHONE_STATE 
E/permission.debug: need to grant android.permission.GET_ACCOUNTS 
E/permission.debug: need to grant android.permission.WRITE_EXTERNAL_STORAGE 
E/permission.debug: need to grant android.permission.RECORD_AUDIO 

Спасибо.

+0

Не могли бы вы поделиться своим LogCat? –

+0

Я попытался получить некоторые журналы для этого кода, не было никаких ошибок или предупреждений .. Это странно. –

+0

Вы можете найти ответ на этот [link] (https://stackoverflow.com/questions/32714787/android-m-permissions-onrequestpermissionsresult-not-being-called) –

ответ

1

Попробуйте запросить запрос непосредственно, а не ActivityCompat.requestPermissions. Как ниже

if (checkNeededPermissions.size() > 0) { 
    Log.d(TAG, "Checking permissions"); 
    requestPermissions(this, dangerousPermissions, 4); 
} 

EDIT

Я не вижу, где вы определили список checkNeededPermissions. Не могли бы вы поставить бревно внутри, как указано выше

+0

К сожалению, minSdkVersion - '15'. поэтому я должен использовать 'ActivityCompat.requestPermissions().' –

+0

@EugeneKim почему вы используете FragmentActivity? –

+0

@EugeneKim Я отредактировал ответ выше, пожалуйста, проверьте и попробуйте это один раз. И поделитесь своим logcat –

1

Я только что нашел solution.

Когда вы объявляете какое-либо действие в AndroidManifest.xml с атрибутом noHistory, оно удалит вашу задачу Activity, когда Activity исчезнет с экрана.

Чтобы получить обратный вызов onRequestPermissionResult(), вы должны гарантировать, что мероприятие возобновлено.

0

Был такой же вопрос. Фиксированный его по телефону MyActivity.this вместо того, чтобы это при вызове ActivityCompat.requestPermissions

 Смежные вопросы

  • Нет связанных вопросов^_^