У меня проблемы с обработкой разрешений времени выполнения в Android Marshmallow, и мне действительно нужна рука. Проблема в том, что когда я отказываюсь от разрешения во время выполнения (когда диалог появляется), приложение выходит из строя. Более подробно, активность, которую я запускаю в данный момент, перезапускается (я просто называю это крахом приложения?).Отказ от разрешения Runtime в Android Marshmallow Crashes App
Вот код:
public void showContacts() {
if (CommonData.showLogs) {
Log.d(debugTag, "Show contacts button pressed. Checking permissions.");
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
requestContactsPermissions();
} else {
if (CommonData.showLogs) {
Log.d(debugTag, "Contact permissions have already been granted. Displaying contact details.");
}
// Do my Stuff
}
}
private void requestContactsPermissions() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_CONTACTS)
|| ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_CONTACTS)) {
Snackbar.make(rLParent, R.string.permission_contacts_rationale,
Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat
.requestPermissions(ImportContactsActivity.this, PERMISSIONS_CONTACT,
REQUEST_CONTACTS);
}
})
.show();
} else {
ActivityCompat.requestPermissions(ImportContactsActivity.this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CONTACTS) {
if (PermissionUtil.verifyPermissions(grantResults)) {
// Do my Stuff
} else {
Snackbar.make(rLParent, R.string.permissions_not_granted,
Snackbar.LENGTH_SHORT)
.show();
}
} else {
Log.d(debugTag, "Contacts permissions were NOT granted.");
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Что я здесь делаю неправильно? Любая помощь будет принята с благодарностью. Большое спасибо!
Просьба сообщить о своем отчете о сбое в LogCat. Легче определить проблему таким образом. –
Нет отчета о сбоях в регистрации logcat. Он сразу же перезапустит действие. –
да, это необработанное исключение. Обычно андроид пытается начать свою деятельность сразу же после сбоя ... В развертывании я бы предложил вам развернуть механизм сообщений о сбоях, например, crashlytics для обработки сбоев на пользовательских устройствах. – Kushan