Android 获取具有运行时权限的写入外部存储的错误权限

Android 获取具有运行时权限的写入外部存储的错误权限,android,permissions,Android,Permissions,我在应用程序中使用权限运行时,因为android 6+需要它来获得危险权限,但在强制停止应用程序之前,我的代码不会将文件保存在内存中,即使用户在对话框中允许此权限 获取权限运行时的我的代码: if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISS

我在应用程序中使用权限运行时,因为android 6+需要它来获得危险权限,但在强制停止应用程序之前,我的代码不会将文件保存在内存中,即使用户在对话框中允许此权限

获取权限运行时的我的代码:

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");
            }
    }
}
 java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied)
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();
    }
}
用户授予或拒绝检查的侦听器:

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");
            }
    }
}
 java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied)
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();
    }
}
和错误日志猫:

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");
            }
    }
}
 java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied)
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();
    }
}
在此中保存文件方法:

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");
            }
    }
}
 java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied)
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();
    }
}

请帮助我

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

你好,你能在应用程序启动时尝试权限请求吗。
我认为这是一个错误,因为当你第一次检查权限,然后得到错误,但可能是第二次保存图像时,请尝试使用它。

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

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

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

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


您正在尝试读取任何文件吗?此外,您是否已将权限添加到清单中?否,我要保存文件是,我已将权限添加到清单中可能存在1B0A-390B的副本-此文件夹是否已存在?另外,请提供您的保存方法,以及您是否尝试读取任何文件?此外,您是否已将权限添加到清单中?否,我要保存文件是,我已将权限添加到清单中可能存在1B0A-390B的副本-此文件夹是否已存在?另外,请在onClick for按钮中提供此方法权限运行时的保存方法。当我单击该按钮直到未强制停止应用程序下一步单击权限对话框中的应用时,出现错误HK请在应用程序启动或主活动启动时检查权限,但不要将saveImage的代码放在该位置。好的,何时使用saveImage?你的意思是从第二次等力停止应用程序开始吗?我使用你的方式,然后在onStart方法中使用检查权限,在onClick中授予权限只使用saveImage方法而不使用检查权限,但不使用workingdxgroup13571357@gmail.comno此方法允许在onClick for按钮中运行时,当我单击该按钮直到不强制停止应用程序时下一步单击对话框中的应用获取权限,错误已存在HK请在应用启动或主活动启动时检查权限,但不将saveImage的代码放在其中好的,以及何时使用saveImage?你的意思是从第二次等力停止应用程序开始吗?我使用你的方式,然后在onStart方法中使用检查权限,在onClick中授予权限只使用saveImage方法而不使用检查权限,但不使用workingdxgroup13571357@gmail.comtnxrobby但是不为我工作我使用你的代码和你的方式但是什么也没有发生robby但是不工作对我来说,我使用你的代码和你的方式,但没有别的事情发生