Saya telah mencoba solusi yang disediakan oleh Dmitriy Lozenko dan Gnathonic di Samsung Galaxy Tab S2 saya (Model: T819Y) tetapi tidak ada yang membantu saya mengambil jalur ke direktori Kartu SD eksternal. mount
eksekusi perintah berisi jalur yang diperlukan ke direktori Kartu SD eksternal (yaitu / Storage / A5F9-15F4) tetapi tidak cocok dengan ekspresi reguler sehingga tidak dikembalikan. Saya tidak mendapatkan mekanisme penamaan direktori yang diikuti oleh Samsung. Mengapa mereka menyimpang dari standar (yaitu extsdcard) dan menghasilkan sesuatu yang sangat mencurigakan seperti dalam kasus saya (yaitu / Storage / A5F9-15F4) . Apakah ada yang saya lewatkan? Bagaimanapun, mengikuti perubahan ekspresi reguler Gnathonic's solusi membantu saya mendapatkan direktori sdcard yang valid:
final HashSet<String> out = new HashSet<String>();
String reg = "(?i).*(vold|media_rw).*(sdcard|vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
String s = "";
try {
final Process process = new ProcessBuilder().command("mount")
.redirectErrorStream(true).start();
process.waitFor();
final InputStream is = process.getInputStream();
final byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
s = s + new String(buffer);
}
is.close();
} catch (final Exception e) {
e.printStackTrace();
}
// parse output
final String[] lines = s.split("\n");
for (String line : lines) {
if (!line.toLowerCase(Locale.US).contains("asec")) {
if (line.matches(reg)) {
String[] parts = line.split(" ");
for (String part : parts) {
if (part.startsWith("/"))
if (!part.toLowerCase(Locale.US).contains("vold"))
out.add(part);
}
}
}
}
return out;
Saya tidak yakin apakah ini adalah solusi yang valid dan apakah itu akan memberikan hasil untuk tablet Samsung lainnya tetapi itu telah memperbaiki masalah saya untuk saat ini. Berikut adalah metode lain untuk mengambil jalur Kartu SD yang dapat dilepas di Android (v6.0). Saya telah menguji metode ini dengan android marshmallow dan berhasil. Pendekatan yang digunakan di dalamnya sangat mendasar dan pasti akan berfungsi untuk versi lain juga, tetapi pengujian itu wajib. Beberapa wawasan tentang itu akan membantu:
public static String getSDCardDirPathForAndroidMarshmallow() {
File rootDir = null;
try {
// Getting external storage directory file
File innerDir = Environment.getExternalStorageDirectory();
// Temporarily saving retrieved external storage directory as root
// directory
rootDir = innerDir;
// Splitting path for external storage directory to get its root
// directory
String externalStorageDirPath = innerDir.getAbsolutePath();
if (externalStorageDirPath != null
&& externalStorageDirPath.length() > 1
&& externalStorageDirPath.startsWith("/")) {
externalStorageDirPath = externalStorageDirPath.substring(1,
externalStorageDirPath.length());
}
if (externalStorageDirPath != null
&& externalStorageDirPath.endsWith("/")) {
externalStorageDirPath = externalStorageDirPath.substring(0,
externalStorageDirPath.length() - 1);
}
String[] pathElements = externalStorageDirPath.split("/");
for (int i = 0; i < pathElements.length - 1; i++) {
rootDir = rootDir.getParentFile();
}
File[] files = rootDir.listFiles();
for (File file : files) {
if (file.exists() && file.compareTo(innerDir) != 0) {
// Try-catch is implemented to prevent from any IO exception
try {
if (Environment.isExternalStorageRemovable(file)) {
return file.getAbsolutePath();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
Mohon bagikan jika Anda memiliki pendekatan lain untuk menangani masalah ini. Terima kasih