Tôi đã thử các giải pháp do Dmitriy Lozenko và Gnathonic cung cấp trên Samsung Galaxy Tab S2 (Model: T819Y) của mình nhưng không có giải pháp nào giúp tôi truy xuất đường dẫn đến thư mục Thẻ SD bên ngoài. mount
thực thi lệnh chứa đường dẫn bắt buộc đến thư mục Thẻ SD bên ngoài (tức là / Storage / A5F9-15F4) nhưng nó không khớp với biểu thức chính quy do đó nó không được trả về. Tôi không nhận được cơ chế đặt tên thư mục theo sau của Samsung. Tại sao họ lại đi lệch khỏi các tiêu chuẩn (ví dụ: thẻ extsdcard) và đưa ra một thứ gì đó thực sự khó hiểu như trong trường hợp của tôi (ví dụ / Storage / A5F9-15F4) . Có điều gì tôi đang thiếu không? Dù sao, sau những thay đổi trong biểu thức chính quy của Gnathonic giải pháp đã giúp tôi có được thư mục sdcard hợp lệ:
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;
Tôi không chắc liệu đây có phải là giải pháp hợp lệ hay không và liệu nó có mang lại kết quả cho các máy tính bảng Samsung khác hay không nhưng hiện tại nó đã khắc phục được sự cố của tôi. Sau đây là một phương pháp khác để truy xuất đường dẫn Thẻ SD di động trong Android (v6.0). Tôi đã thử nghiệm phương pháp với android marshmallow và nó hoạt động. Phương pháp tiếp cận được sử dụng trong nó là rất cơ bản và chắc chắn sẽ hoạt động cho các phiên bản khác nhưng việc kiểm tra là bắt buộc. Một số thông tin chi tiết về nó sẽ hữu ích:
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;
}
Vui lòng chia sẻ nếu bạn có bất kỳ cách tiếp cận nào khác để xử lý vấn đề này. Cảm ơn