我想把一些字符串保存到SD卡上。但它正在引发此异常打开失败的事件(权限被拒绝)。我在一个设备(华硕曾丰5)上测试了这个。我已经在manifest file-write_external_存储器中声明了权限,我的SD卡已经挂载,可以从中写入和读取数据(我已经亲自检查了它,复制了一些MP3文件并播放了它们)。由于这是一个特定于手机的应用程序,手机有一个内部和外部存储器,我想把文件保存在外部SD卡中,所以我写了一个这样的代码。我通过使用“cd”和“ls”命令,使用终端仿真器应用程序获得外部SD卡的绝对路径。我的手机没有根,所以我不能直接发布任何权限更改。我已经尝试了google和stackoverflow所有可能的方法。请帮帮我

public void savePublicExternalFile(String data){
        File folder = new File("/Removable/MicroSD/");
        //i have also tried File folder = new File("/Removable/MicroSD");
        File myFile = new File(folder,"mydata.txt");
        WriteData(myFile, data);



    }

    private void WriteData(File myFile, String data){

        if(t){
            Log.i("AbsolutePath",myFile.getAbsolutePath());
            t = false;
        }

        FileOutputStream fileOutputStream=null;
        try {
            fileOutputStream = new FileOutputStream(myFile);
            fileOutputStream.write(data.getBytes());
        } catch (Exception e) {
            Log.i("exception",e.toString());
        }  finally {
            if(fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    Log.i("exception", e.toString());
                }
            }
        }


    }

最佳答案

我假设你的华硕Zenfone运行在Android版本上。因此,由于Kitkat由于SD卡写入策略的重大更改,您将无法在SD卡上写入,除非您的应用程序专用文件夹中(SD卡中的>= KitKat)。
要访问SD卡上的此文件夹,在/storage/../data/com.example/中添加了新的API。此API将返回一个包含所有应用程序专用文件夹路径的文件数组。

File[] files = ContextCompat.getExternalFilesDirs(context, null)

默认情况下,KitKat位置路径类似于旧api0th返回的路径,这是主存储。Environment.getExternalStorageDirectory()位置(一般)将是通常是SD卡的其他存储目录。使用此文件路径在SD卡上写入。在SD卡上写入任何内容之前,请确保验证其已安装状态。
希望能帮上忙。如果你有其他问题,请告诉我。

10-05 21:18
查看更多