Androidで外部ストレージのパスを取得する方法
現在Androidで外部ストレージのパスを取得するAPIが存在しない。
Androidでストレージのパスを取得するEnvironment.getExternalStorageDirectory()は、 内部ストレージが存在する場合、名前に反して内部ストレージのパスを返す。(これは、既存プログラムの互換性を考えた時に、必要な考慮と思われる。)
そのため、以下を参考にして/system/etc/vold/fstabを使用する方法で取得することにした。
(参考http://inujirushi123.blog.fc2.com/blog-entry-93.html)
Xperia VLの/system/etc/vold.fstabを確認したところ
内部ストレージがfuse_mountで定義されていたため、追加している。
static private List getStoragePaths() {
List mountList = new ArrayList();
Scanner scanner = null;
try {
scanner = new Scanner(new FileInputStream(new File(
"/system/etc/vold.fstab")));
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("dev_mount") || line.startsWith("fuse_mount")) {
String path = line.split(" ")[2].replaceAll(":.*$", "");
if (!mountList.contains(path)){
File dir = new File(path + "/");
if (dir.canRead()){
mountList.add(path);
}
}
}
}
} catch (Exception e) {
mountList = new ArrayList();
mountList.add(Environment.getExternalStorageDirectory().getAbsolutePath());
} finally {
if (scanner != null) {
scanner.close();
}
}
return mountList;
}