无法在Android 5.0.1中的可移动SD卡上创建文件

时间:2016-04-21 21:22:33

标签: android android-5.0-lollipop android-sdcard samsung-mobile android-external-storage

我正在开发一个需要能够在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卡但不能写入可移动卡,静态引用也是如此。为简化起见,此处的示例代码中使用静态路径。

1 个答案:

答案 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/