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

后端 未结 2 1331
无人及你
无人及你 2020-12-19 18:09

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?

H

相关标签:
2条回答
  • 2020-12-19 18:36

    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();
    }
    
    0 讨论(0)
  • 2020-12-19 18:49

    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

    0 讨论(0)
提交回复
热议问题