android - 无法在 Android(在 MarshMallow 及更高版本)设备中创建目录

标签 android android-6.0-marshmallow android-permissions

我正在尝试使用以下代码在我的 SD 卡上创建一个文件夹,但它失败了。这是我在 onCreate() 中编写的代码:

File test = new File(Environment.getExternalStorageDirectory(),"my_directory");
if(!test.exists())
{
    try 
    {
        if (test.mkdir()) 
        {
            Log.d("xxx", "directory created");
        } 
        else 
        {
             Log.d("xxx", "directory creation failed");
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
else
{
    Log.d("xxx","directory already present");
}

当我运行上面的代码时没有给出任何异常它只是打印 directory creation failed日志。

我还授予了以下权限,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我用的是小米红米note 3,安卓版本是6.0.1

最佳答案

试试这段代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        if (checkPermission()) {
                            //do your work
                        } else {
                            requestPermission();
                        }
                    }
           }


            protected boolean checkPermission() {
                int result = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
                if (result == PackageManager.PERMISSION_GRANTED) {
                    return true;
                } else {
                    return false;
                }
            }

            protected void requestPermission() {

                if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                    Toast.makeText(this, "Write External Storage permission allows us to do store images. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show();
                } else {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
                    }
                }
            }

        @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            switch (requestCode) {
                case 100:
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        //do your work
                    } else {
                        Log.e("value", "Permission Denied, You cannot use local drive .");
                    }
                    break;
            }
        }

关于android - 无法在 Android(在 MarshMallow 及更高版本)设备中创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41362459/

相关文章:

Android Sqlite 查询检测表中何时不存在元素

android - Android版MuPDF : Option for fragment instead Activity

android - 您可以在 Android Marshmallow (API 23) 的运行时权限模型中同步请求权限吗?

android - AOSP Marshmallow 修改/设置默认权限

java - 如何读写SD卡?

android - 当授予权限时调用 UsbManager Request Permission 执行例程时的事件监听器是什么?

c# - 在 Unity3D 场景中更改 Android 状态栏颜色

android - DragEventListener 不适用于三星 S7 (6.0)

安卓应用权限

android - 在 Android 中下载和提取 Zip 文件