![](/img/trans.png)
[英]Struggling with a 'run-time' Android WRITE_EXTERNAL_STORAGE permission
[英]Application not able to access SD card when WRITE_EXTERNAL_STORAGE permission is granted at run time
在android M中訪問sdcard必須在運行時授予權限時強制停止並啟動app,如何以編程方式實現?
但是,如果應用程序強制停止並重新啟動,則可以訪問sdcard。
AndroidManifest.xml:
uses-permission-sdk-m android:name="android.permission.WRITE_EXTERNAL_STORAGE
/* **Checking permission **
if doesn't have request
else
browse file directory
*/
String[] perm = { Manifest.permission.WRITE_EXTERNAL_STORAGE };
if (checkSelfPermission(perm[0]) == PackageManager.PERMISSION_DENIED) {
requestPermissions(perm, REQ);
} else {
Explore(); //method to browse file directory
}
onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
// TODO Auto-generated method stub
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Not able to browse SD card until restart application
Explore(); //method to browse file directory
} else {
Log.i("onRequestPermissionsResult", " Request denied");
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
您需要重新啟動應用程序才能獲得WRITE_EXTERNAL_STORAGE權限(其他一些權限)。 這是因為此權限實際上是Linux權限。 在這種情況下,Android的最新預覽版本不會重新啟動應用程序,但Google可能會在稍后添加。
您可以使用此代碼重新啟動:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// Write external store permission requires a restart
for (int i = 0; i < permissions.length; i++)
if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permissions[i]) &&
grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "Restarting application");
// Schedule start after 1 second
PendingIntent pi = PendingIntent.getActivity(
this,
0,
getIntent(),
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, pi);
// Stop now
System.exit(0);
}
}
編輯:您可以在此處找到與Linux權限相關聯的Android權限列表: https : //android.googlesource.com/platform/frameworks/base/+/master/data/etc/platform.xml
您可以在以下條件下檢查SD卡是否可用
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
//Check for the file
File appFolder = new File(Environment.getExternalStorageDirectory() + File.separator
+ context.getString(R.string.app_name));
boolean exist = appFolder.exists();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.