在低於棉花糖的Android版本中,我可以運行將文件寫入外部存儲的應用程序。在這些系統中,授權在安裝應用程序時被授予。但是當我試圖在棉花糖中運行我的應用程序時,它在安裝時說「該應用程序不需要任何權限」。當我執行寫入功能時,應用程序意外退出。我們是否需要在Marshmallow中明確要求AndroidManifest.xml以外的權限?
通常,設備會在首次打開時要求爲每個應用授予權限。但在我的應用程序中,這也不會發生。
在低於棉花糖的Android版本中,我可以運行將文件寫入外部存儲的應用程序。在這些系統中,授權在安裝應用程序時被授予。但是當我試圖在棉花糖中運行我的應用程序時,它在安裝時說「該應用程序不需要任何權限」。當我執行寫入功能時,應用程序意外退出。我們是否需要在Marshmallow中明確要求AndroidManifest.xml以外的權限?
通常,設備會在首次打開時要求爲每個應用授予權限。但在我的應用程序中,這也不會發生。
您必須自行爲Android 6.0+(Marshmallow)提供運行時權限處理。有關更多信息,請參閱here。
在Android M及以上版本中,您必須要求分類爲「危險」的權限。您可以找到需要請求的權限的完整列表here。
但是,您可以通過將compileSDK和targetSDK設置爲<來避免請求。請注意,這會阻止您使用任何API 23+功能。
您所請求的權限是這樣的:
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},//Your permissions here
1);//Random request code
檢查用戶是否正在運行的API 23+這樣做:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
//Request: Use a method or add the permission asking directly into here.
}
如果你需要檢查的結果,你可以做到這一點像這樣:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
哇..謝謝.. !! –