Я работаю над приложением, которому нужна возможность создавать файлы на съемной SD-карте в устройстве Samsung S4 i9295. Я использую стандартную прошивку Samsung 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-карту, но не на съемную карту, как в случае со статическими ссылками. Статические пути используются в примере кода здесь для упрощения.