android 6 - 打开失败:ENOENT(没有这样的文件或目录)

时间:2016-08-08 15:18:05

标签: android

创建新文件时,我收到上述错误。此代码适用于Android 4.4版本。我正在测试6.0.1设备并收到此错误。我在清单文件中有写权限,在创建文件之前尝试了mkDirs(),仍然是同样的问题。以下是代码段:

File newFile = new File(localFilePath);
        try {
            String abc = null;
            abc = Environment.getExternalStorageState();
            if(!newFile.exists()) {
                newFile.mkdirs();
                newFile.createNewFile();
            }
        } catch (IOException e1) {
            e1.printStackTrace();
            return false;
        }

externalStoragState返回'已安装'。存储位置为/ storage / emulated / 0 / testlocation / filename ..

1 个答案:

答案 0 :(得分:4)

您必须为6.0提供运行时权限

private static final int MY_PERMISSIONS_REQUEST_STORAGE = 1;
 private String[] storage_permissions =
            {
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
    if ((int) Build.VERSION.SDK_INT >= 23) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

                        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                                android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
                                builder.setMessage("To get storage access you have to allow us access to your sd card content.");
                                builder.setTitle("Storage");
                                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        ActivityCompat.requestPermissions(OmniSalesHubDrawerActivity.this, storage_permissions, 0);
                                        onContactsClick();
                                    }
                                });

                                builder.show();
                            } else {
                                ActivityCompat.requestPermissions(this, storage_permissions, 0);
                                onContactsClick();
                            }
                        } else {
                            ActivityCompat.requestPermissions(DrawerActivity.this,
                                    storage_permissions,
                                    MY_PERMISSIONS_REQUEST_STORAGE);
                            onContactsClick();
                        }

                    }
                }