Android でセンサ等の様々な情報を収集し, PC で解析する時があります. 以前の Android は getExternalStorageDirectory() で SD カードの位置を知り, 適当にデータを書き込んだ後に「USB ストレージを ON にする」だけで データのやりとりができました. ところが最近の Android は getExternalStorageDirectory() は 内蔵メモリのどこかを指し, SD カード本来の位置がわかりません. さらに新規に作成したファイルやディレクトリは Android を再起動しない 限り PC から見ることができません. それだと困るのでなんとかならんか調べてみました.
SD カードの位置の知り方:
if (!GetStragePath()) sdPath = Environment.getExternalStorageDirectory() + "/"; |
boolean GetStragePath(){ try { Scanner 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 str = line.replaceAll("\t", " ").split(" ")[1]; if (str.equalsIgnoreCase("sdcard")){ sdPath = line.replaceAll("\t", " ").split(" ")[2]; sdPath += "/"; return true; } } } } catch (FileNotFoundException e) {} return false; } |
再起動しなくても PC からみえるようにする:
String [] paths = {csvPath, tgpPath}; String [] mime ={"text/csv", "audio/3gpp"}; MediaScannerConnection.scanFile(getApplicationContext(), paths, mime, null); |