我正在开发一个需要能够在Samsung S4 i9295设备的可移动SD卡上创建文件的应用程序。我正在运行已经扎根的股票Samsung ROM 5.0.1。出于测试目的,我一直在尝试通过硬编码此特定设备的路径来创建这些文件,但无法在可移动卡上创建文件。下面的代码在内部SD卡上按预期创建文件,但不在可移动卡上创建文件。
//creates directory on internal sdcard
public void createInternalSdcardFile(){
Log.v(LOGTAG, "Create internal sdcard file initiated");
String szFilePath = "/storage/sdcard0";
File appDir = new File(szFilePath, "TargetFile");
appDir.mkdir();
makeTimestamp();
File exportDir = new File(szFilePath, "TargetFile/" + szDateTime);
exportDir.mkdir();
}
//creates a directory at the root of the REMOVEABLE sdcard
public void createRemoveableSdcardFile(){
Log.v(LOGTAG, "Create removeable sdcard file initiated");
String szFilePath = "/storage/extSdCard";
File appDir = new File(szFilePath, "TargetFile");
appDir.mkdir();
makeTimestamp();
File exportDir = new File(szFilePath, "TargetFile/" + szDateTime);
exportDir.mkdir();
}
public void makeTimestamp(){
Date T = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
szDateTime = sdf.format(T);
}
Logcat的评论显示没有任何可疑之处。相关的清单权限是:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_SECONDARY_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SECONDARY_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.STORAGE" />
设备上的“/ storage / extSdCard”的文件权限是所有者具有读,写,执行权限。组也具有读,写和执行功能。其他人只是执行。 “/ storage / sdcard0”的文件权限是为每个人读取,写入和执行的。
为什么我无法在此设备的可移动卡上写字?对于解决方案的具体建议将不胜感激。
注意:我也在使用getExternalFilesDirs()
并且能够写入内部SD卡但不能写入可移动卡,静态引用也是如此。为简化起见,此处的示例代码中使用静态路径。
答案 0 :(得分:0)
知道了。 一般来说,替换......
String szFilePath = "/mnt/extSdCard/temp";
用这个:
File[] fo = getExternalFilesDirs(null);
File f =fo[1];
解决了这个问题。最终测试用例的具体更改是:
public void createRemoveableSdcardFile(View view) {
File[] fo = getExternalFilesDirs(null);
File f =fo[1];
File appDir = new File(f, "TargetFile");
appDir.mkdir();
makeTimestamp();
File exportDir = new File(f, "TargetFile/" + szDateTime);
exportDir.mkdir();
}
这会在可移动的SD卡上创建一个文件:
../extsdcard/android/data/net.google.example/file/