首先,我知道這是一個重複的問題,但我一直在回答其他類似問題的答案,並且未能找到任何解決方案的成功。在運行時詢問權限Android M +
我開發了一個應用程序,它完美地運行在我的測試設備上,這是一個運行Android L(5.0.1)的三星S4,但是我希望這個應用程序也能在更新版本的Android上工作。
我知道Android M +的請求權限已更改,因此必須在運行時詢問它們,但是當我嘗試實現此操作時,對話框從不出現,因此從不要求所需的權限。
我要求的許可是ACCESS_FINE_LOCATION
。
這裏是我的清單文件中的相關代碼:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
哪裏許可問,如果它不被授予:
if (ActivityCompat.checkSelfPermission(MapsActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
startGeofenceMonitoring();
} else {
askForPermission(android.Manifest.permission.ACCESS_FINE_LOCATION,LOCATION);
}
askForPermission功能(略從谷歌的例子修改):
private void askForPermission(String permission, Integer requestCode) {
if (ContextCompat.checkSelfPermission(MapsActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(MapsActivity.this, permission)) {
//This is called if user has denied the permission before
//In this case I am just asking the permission again
ActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCode);
} else {
Log.d(TAG, "askForPermission: " + permission);
ActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCode);
}
} else {
Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show();
}
}
而onRequestPermissionsResult函數:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d(TAG, "onRequestPermissionsResult: " + requestCode);
switch (requestCode) {
case 1:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "onRequestPermissionsResult: request");
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
startGeofenceMonitoring();
}
break;
}
}
正如我所說的,這是要求的權限對話框中永遠不會出現,但我的控制檯告訴我,ActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCode);
被調用,並且大量的研究後,我仍然不知道爲什麼它不是」不工作。我認爲唯一可能的原因是此活動是一項顯示Google地圖地圖的片段活動。我確實嘗試在另一個活動中請求權限,但發生完全相同的情況。
謝謝。
編輯
所以我只是測試我這裏張貼在一個完全新的項目代碼和它運行得很好,顯示該對話框。我現在很困惑,因爲什麼阻止了我的當前項目中顯示這個對話框。
請嘗試完全卸載您的應用程序,然後重新安裝它。也許在測試中,當被問及時,你會被拒絕兩次,之後Android會停止顯示對話。 – CommonsWare
剛試過這個,很不幸,它還沒有解決問題。 – Haris