我在處理Android Marshmallow中的運行時權限時遇到了問題,而且我確實需要一隻手。問題是當我拒絕運行時權限(當對話框出現時),應用程序崩潰。更詳細地說,我正在運行的活動重新啓動(我只是稱它爲應用程序崩潰?)。拒絕Android棉花糖崩潰中的運行時權限應用
下面是代碼:
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崩潰報告先生。它將立即重新開始活動。 –
是的,這是一個未處理的異常。通常,android會嘗試在崩潰後立即啓動該活動......在部署中,我建議您部署一些崩潰報告機制,例如crashlytics以處理用戶設備上的崩潰。 – Kushan