无法在 Android 5.0.1 中的可移动 SD 卡上创建文件
Unable to create file on removeable sdcard in Android 5.0.1
我正在开发一个需要能够在 Samsung S4 i9295 设备的可移动 SD 卡上创建文件的应用程序。我是 运行 已 root 的原装三星 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 卡,但不能写入可移动卡,静态引用也是如此。为了简化,此处的示例代码中使用了静态路径。
知道了。
一般来说,替换...
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/
我正在开发一个需要能够在 Samsung S4 i9295 设备的可移动 SD 卡上创建文件的应用程序。我是 运行 已 root 的原装三星 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 卡,但不能写入可移动卡,静态引用也是如此。为了简化,此处的示例代码中使用了静态路径。
知道了。 一般来说,替换...
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/