Application not able to access SD card when WRITE_EXTERNAL_STORAGE permission is granted at run time

ε祈祈猫儿з 提交于 2019-11-28 05:42:02

问题


In android M to access sdcard has to force stop and start app manually when permission is granted at runtime, how to achieve it programmatically?

However sdcard can be accessed if the app is force stop and restarted.

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);
}

回答1:


You will need to restart the application to obtain the WRITE_EXTERNAL_STORAGE permission (an some other permissions). This is because this permission is actually a Linux permission. The latest preview version of Android does not restart the application in this case, but maybe Google will add this later.

You could use this code to do the restart:

@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);
        }
}

Edit: you can find a list of Android permissions which are associated with a Linux permission here: https://android.googlesource.com/platform/frameworks/base/+/master/data/etc/platform.xml




回答2:


You can below condition to check whether SDCard is available or not

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();
}


来源:https://stackoverflow.com/questions/32471888/application-not-able-to-access-sd-card-when-write-external-storage-permission-is

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!