戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デバイスにSDカードがマウントされているかチェックする

デバイスにSDカードがマウントされているかチェックする方法。

SDカードがマウントされているかは Environment.getExternalStorageState() を使うことでSDカードの状態を確認することができます。
カードの状態が Environment.MEDIA_MOUNTEDEnvironment.MEDIA_MOUNTED_READ_ONLY であればマウントされていることになります。
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// SDカードがマウントされている
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// SDカードがマウントされている(読み取り専用)
} else {
// SDカードがマウントされていない
}

ただし、この方法だと内蔵ストレージと外部ストレージに分かれているデバイスでは、内蔵ストレージの状態を取得します。

外部ストレージの状態を取得するAPIは用意されていません
そこで、Linuxのmountコマンドを使いマウントポイントを取得。取得したマウントポイントに外部ストレージのパスが存在するかで確認を行います。

AndroidでLinuxコマンドを呼び出すには Runtime.getRuntime().exec(String prog) を使います。

【参考サイト】yohpapaの日記 - Primary Memory vs Removable Memory

yohpapaの日記 さまのソースコードより
/**
* 指定されたパスがマウントされているかチェックする。
* USB接続で外部ストレージモードにしている場合などにはマウント扱いされずに false を返します。
*
* @param path
* マウントされているかチェックするパス
* @return true:マウントされている、false:マウントされていない
*/
public static boolean isMounted(String path) {
boolean isMounted = false;

BufferedReader reader = null;
try {
// マウントポイントを取得する
Process process = Runtime.getRuntime().exec("mount");
reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));

// マウントポイントに該当するパスがあるかチェックする
String line;
while ((line = reader.readLine()) != null) {
if (line.contains(path)) {
// 該当するパスがあるのでマウントされている
isMounted = true;
break;
}
}

// プロセスが終了するまで待つ
process.waitFor();

} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}

// マウント状態を返します
return isMounted;
}

上記のメソッドに外部ストレージのパスを指定することで、マウントされているかのチェックを行うことができます。

ただし、USB接続して外部ストレージモードになっている場合、SDカードのマウント状態が mount ではなく shared となるため false を返すので注意してください。
(mountコマンドで取得されない)
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。