Ben sağladığı çözümler denedi Dmitriy Lozenko ve Gnathonic üzerinde benim Samsung Galaxy Tab S2 (Model: T819Y) ama hiçbiri beni harici SD Kart dizinine yolunu almak yardımcı oldu. mount
komut yürütme, harici SD Kart dizini için gerekli yolu içeriyordu (yani / Storage / A5F9-15F4), ancak normal ifadeyle eşleşmediğinden döndürülmedi. Samsung tarafından takip edilen dizin adlandırma mekanizmasını anlamıyorum. Neden standartlardan sapıyorlar (örn. Extsdcard) ve benim durumumda olduğu gibi gerçekten balık gibi bir şey buluyorlar (yani / Storage / A5F9-15F4) . Kaçırdığım bir şey var mı? Her neyse, normal ifadesindeki değişiklikleri takiben Gnathonic'in çözüm geçerli bir sdcard dizini edinmeme yardımcı oldu:
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();
}
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;
Bunun geçerli bir çözüm olup olmadığından ve diğer Samsung tabletleri için sonuç verip vermeyeceğinden emin değilim ama şimdilik sorunumu çözdü. Aşağıda, Android'de (v6.0) çıkarılabilir SD Kart yolunu almak için başka bir yöntem verilmiştir. Yöntemi android hatmi ile test ettim ve işe yarıyor. İçinde kullanılan yaklaşım çok basittir ve kesinlikle diğer sürümler için de işe yarayacaktır, ancak test etmek zorunludur. Bununla ilgili bazı bilgiler yardımcı olacaktır:
public static String getSDCardDirPathForAndroidMarshmallow() {
File rootDir = null;
try {
File innerDir = Environment.getExternalStorageDirectory();
rootDir = innerDir;
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 {
if (Environment.isExternalStorageRemovable(file)) {
return file.getAbsolutePath();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
Bu konuyu ele almak için başka bir yaklaşımınız varsa lütfen paylaşın. Teşekkürler