我想把一些字符串保存到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卡上写入任何内容之前,请确保验证其已安装状态。希望能帮上忙。如果你有其他问题,请告诉我。