获得具有运行时权限的错误权限write_external_storage

时间:2016-11-12 09:51:38

标签: android permissions

我在app中使用权限运行时因为android 6+需要它来获取危险权限但是直到强制停止app我的代码不会将文件保存在内存中,即使用户在对话框中允许此权限。

获取权限运行时的代码:

if(ContextCompat.checkSelfPermission(MainActivity.this,
                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED ){
                    ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                            Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
            }else{
                saveFile();
            }

用户授予或拒绝支票的监听器:

public void onRequestPermissionsResult(int requestCode,String[] permission,int[] grantedResult){
    super.onRequestPermissionsResult(requestCode, permission, grantedResult);
    switch(requestCode){
        case 1:
            if(grantedResult.length > 0 && grantedResult[0] == PackageManager.PERMISSION_GRANTED){
                Log.i("TAG","Permission Granted");
            }else{
                Log.i("TAG","Permission Denied");
            }
    }
}

错误logcat:

 java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied)

SaveFile方法:

public void saveFile(){
    InputStream in;
    OutputStream out;

    try{

        in = getResources().openRawResource(R.raw.hamedbaradaran);
        out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/hamed-baradaran.mp3");
        byte[] buffer = new byte[1024];
        int length;
        while((length = in.read(buffer)) > 0)
            out.write(buffer,0,length);

        out.flush();
        out.close();
        in.close();

    }catch(Exception e){
        e.printStackTrace();
    }
}

请帮帮我

2 个答案:

答案 0 :(得分:1)

您好,可以在应用启动时尝试权限请求。 我认为有错误,因为当你第一次检查权限然后得到错误但可能是第二次保存图像我试试..

答案 1 :(得分:1)

尝试使用此代码来保存图像

public static String SaveImage(Bitmap finalBitmap) {
    String filePath;
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images_camera");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-" + n + ".png";
    // filePath = "Image-" + n + ".jpg";

    File file = new File(myDir, fname);
    filePath = file.getAbsolutePath();
    //String tmpFilePath = file.getPath().toString();
    IRoidAppHelper.Log("tmpFilePath", filePath);
    if (file.exists()) file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return filePath;
}