আমি আমার স্যামসাং গ্যালাক্সি ট্যাব এস 2 (মডেল: T819Y) তে দিমিত্রি লোজেনকো এবং গাথোনটিকের প্রদত্ত সমাধানগুলি চেষ্টা করেছি তবে বাইরের এসডি কার্ড ডিরেক্টরিতে আমাকে পুনরুদ্ধার করতে কেউই আমাকে সহায়তা করেনি। কমান্ড এক্সিকিউশনে বাহ্যিক এসডি কার্ড ডিরেক্টরিতে (যেমন / স্টোরেজ / এ 5 এফ 9-15 এফ 4) প্রয়োজনীয় পাথ রয়েছে তবে এটি নিয়মিত প্রকাশের সাথে মেলে না তাই এটি ফিরে আসে নি। স্যামসুংয়ের পরে ডিরেক্টরি নামকরণের পদ্ধতিটি আমি পাই না। কেন তারা মানদণ্ড থেকে বিচ্যুত হয় (অর্থাত্ extsdcard) এবং আমার ক্ষেত্রে (যেমন / স্টোরেজ / এ 5 এফ 9-15 এফ 4) এর মতো সত্যই মজাদার কিছু নিয়ে আসে । আমি কি অনুপস্থিত কিছু আছে? যাইহোক, গ্যাথোনিকের নিয়মিত অভিব্যক্তিতে পরিবর্তনগুলি অনুসরণ করেmount
সমাধান আমাকে বৈধ এসডকার্ড ডিরেক্টরি পেতে সহায়তা করেছে:
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;
আমি নিশ্চিত নই যে এটি কোনও বৈধ সমাধান এবং এটি যদি অন্য স্যামসাং ট্যাবলেটগুলির ফলাফল দেয় তবে এটি আমার আপাতত স্থির করে দিয়েছে। অ্যান্ড্রয়েড (v6.0) এ অপসারণযোগ্য SD কার্ড পাথ পুনরুদ্ধার করার জন্য অন্য একটি পদ্ধতি অনুসরণ করা হল। আমি অ্যান্ড্রয়েড মার্শমালো দিয়ে পদ্ধতিটি পরীক্ষা করেছি এবং এটি কাজ করে। এতে ব্যবহৃত পদ্ধতির বিষয়টি খুব মৌলিক এবং অবশ্যই অন্যান্য সংস্করণগুলিতেও কাজ করবে তবে পরীক্ষাটি বাধ্যতামূলক। এর মধ্যে কিছু অন্তর্দৃষ্টি সহায়ক হবে:
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;
}
এই সমস্যাটি পরিচালনা করার জন্য আপনার কাছে যদি অন্য কোনও পদ্ধতি থাকে তবে দয়া করে ভাগ করুন। ধন্যবাদ