2011/08/07

[a500]自作EjectSDが動かない

A500の調子がいいうちに、自作のアプリをインストールしてみた。
それが悪い影響を及ぼすかどうか知らんけど、普通に動いてもらわねば。


https://market.android.com/details?id=jp.typepad.hirokuma.EjectSD
うまく動かない。
マウントなどを認識してくれないのだ。

logcatで見ると、アプリは/mnt/sdcardを見ているようだ。
しかしmountで見ると、SDカードは
  • /mnt/external_sd
  • /mnt/secure/asec
あたりにマウントされているようなのだ。
うーむ、巷では聞いたことがあったのだが、自分のところに影響しようとは。
printenvすると、こうなっていた。

SECOND_VOLUME_STORAGE=/mnt/external_sd

EjectSDでは、Environment.getExternalStorageState()でマウント状態を取得している。
パスは、Environment.getExternalStorageDirectory().toString()で取得している。
つまり、getExternalStorageシリーズでは正しく取得できないことになる。
まいったなあ。


http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
getExternalFilesDir(null)、でいいのかな?

ちょろっと試したいところだが、mmでビルドできる環境じゃないと動かないアプリなのだ。
Context.getExternalFilesDir(null)

これは、nullが返ってきた。
W/ApplicationContext(  835): Unable to create external files directory

API9だとandroid.os.storage.StorageManagerがあるので、使えるかもしれん。
が、それは使いたくないので、このまま進めよう。

環境変数を見てみる。

String str3 = System.getenv("THIRD_VOLUME_STORAGE");
String str2 = System.getenv("SECOND_VOLUME_STORAGE");
String str1 = System.getenv("EXTERNAL_STORAGE");
String str = Environment.getExternalStorageDirectory().toString();

結果

D/EjectSD ( 1195): 3 : /mnt/usb_storage
D/EjectSD ( 1195): 2 : /mnt/external_sd
D/EjectSD ( 1195): 1 : /mnt/sdcard
D/EjectSD ( 1195): 0 : /mnt/sdcard


決め手に欠けるので、これはユーザに選んでもらうしかないなぁ。

しかしどうしようもないのは、mount/umountのブロードキャストが飛んできてなさそうなこと。
MountServiceではだめなのかなぁ。
voldやMediaScannerなんかは動いているから、取得する方法はありそうなんだけど。

まだまだ、である。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。