回答
如果用戶拒絕了權限,您可以檢查權限,如果他也檢查過再也不顯示,那麼您可以打開自己的對話框,解釋您的應用程序需要該權限,並從該對話框中可以將用戶帶到應用程序設置中,如果他願意,他可以允許該許可。
public static void checkPermissionForExternalStorage(final Context mContext) {
if (Build.VERSION.SDK_INT >= 23) {
int writeExternalStorage = ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE);
return;
}
//Do your stuff
} else {
//Do your stuff
}
}
public static void startInstalledAppDetailsActivity(Context mContext) {
Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + mContext.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
mContext.startActivity(i);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Do your stuff
} else {
// Permission Denied
if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
showMessageOKCancel("The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission. Tap Settings > Permissions, and turn Storage on.",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startInstalledAppDetailsActivity((Activity) mContext);
}
});
}
Toast.makeText(mContext, "Write to external storage permission request denied.", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
是的,你可以做到這一點。
如果您知道用戶是否授予了許可權,那麼存在回調如果onRequestPermissionsResult
。如果用戶沒有授予權限,則可以在需要時再次請求相同的權限。
@lodox我的答案和你接受的答案是一樣的。但我故意沒有爲你的學習設置任何代碼。但是,如果你期待勺子餵食,那沒問題。祝你好運 – Nikhil
你給用戶一個對話框,詢問去應用程序設置和更改權限那裏,你必須以某種方式激勵他,告訴你爲什麼需要許可。你把一個「開放設置」布頓觸發以下功能:
private void startInstalledAppDetailsActivity() {
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(i);
}
感謝您的回答! :) – lidox
有多種方式來實現你在找什麼:
您可以創建一個單獨的View /片段只是爲了此目的徵用您的應用程序所需的所有權限,從那裏您可以撥打
requestPermission()
。或者,只要用戶通過調用
requestPermission()
打開需要運行權限的應用程序段,您可以簡單地提示用戶輸入權限。用戶還可以從
Settings
嚮應用授予權限。因此,如果他希望從Settings
以後,直接向用戶(例如通過對話)更改權限可能是一個好主意。
- 1. Android M在授予權限後被拒絕
- 2. 檢查M權限被授予或拒絕從非活動類
- 3. MySQL的:授予權限拒絕CREATE
- 4. window.parent.opener授予權限被拒絕
- 5. @授予授權的權限拋出拒絕訪問異常
- 6. Android Studio 1.2.1.1在Windows 10授予權限被拒絕錯誤
- 7. 如何授予在Oracle中授予權限的權限
- 8. 授予Oracle授予權限
- 9. Android M中EXTERNAL_STORAGE所需的授予權限?
- 10. Android權限拒絕
- 11. ANDROID未授予權限
- 12. Android - 未授予URI權限
- 13. 如何授予權限Manifest.permission.MANAGE_DOCUMENTS android 6.0
- 14. 如何授予discoverUserInfoWithUserRecordID權限?
- 15. Php套接字,Apache和CentOS 6.3授予權限被拒絕
- 16. 即使授予角色權限也被拒絕
- 17. 爲什麼帽子部署授予權限被拒絕(publickey)?
- 18. AWS ssh實例授予權限被拒絕(公開)
- 19. PackageManager:未授予權限 - 版本的Android M
- 20. github ssh給予權限被拒絕
- 21. Django給予[Errno 13]權限被拒絕
- 22. 授予LIST權限
- 23. 授予訪問被拒絕
- 24. 如何在ASP NET MVC中更改授權拒絕頁面3
- 25. MySQL - 授予權限
- 26. CryptographicException:拒絕訪問 - 如何授予用戶存儲上的訪問權限?
- 27. 授予dbms_crypto權限
- 28. mysql授予權限
- 29. 如何授予訪問權限以更改所有SQL表的權限?
- 30. 如何授予Sharepoint中有限的「管理權限」權限?
如果用戶選擇節目永遠那麼他/她需要把它從設置中更改否則只有我們可以應用代碼來檢查的權限,每次用戶到達該活動 –
的機制是相同的;您應該存儲被拒絕的權限,您應該使用相同的方法進行詢問。 –
當您執行某個需要** PERMISSION **的操作時,您必須檢查該權限,無論用戶是否已授予該權限。如果**不**,那麼您必須再次要求該許可。直到用戶授予該權限,用戶無法執行該特定任務。 –