2011/08/16

アプリ起動→USB挿し→許可画面→OKとすると、もう1つ開いている

タイトルがわかりにくくてすまん。
今のアプリにある問題点を、動作から書いてみたのだ。
まあ、BTSに登録してようなものだと思ってくれ。


今のアプリは、PaSoRiを挿すと起動して、インテント(ATTACHED)を投げる。
また、許可を得ていない状態でアプリを起動し、PaSoRiが挿さっているのがわかると、インテント(PERMIT)を投げる。
こういうとき、インテントはブロードキャスト(broadcast)する。
そうしないと、誰が受け取れるかわからないからだ。
受けとるアプリが1つにせよ複数にせよ、ダイアログが出てきてユーザに選択させる。

さて、ここら辺がよくわかっていないところだ。
ユーザにアプリを選択させた後、どうなるのか。
それを把握していないから、アプリが2つ起動したようになってしまうのだろう。


あ、アプリが2つ起動したように、というのは、今動かしていたアプリのアクティブなアクティビティが表示されている状態で「BACK」としたのに、同じようなアクティビティが表示されている状態だ。
まったく同じではなく。
今回で言えば、アクティブなアクティビティでは「PaSoRiあるよ」と表示しているのに、BACKしたときに表示されたアクティビティは「PaSoRiないよ」と表示しているのだ。

これは、現在接続されていないから「ないよ」といっているわけではない。
そう作っているのならいいんだけど、私はアクティビティ1つしか持ってないアプリを作ったのだ。
それなら、BACKしたらHOME画面に戻ってほしいのだ。

ここまで読んで気付いたと思うが、これはUSB Hostがどうのこうのという話ではない。
おそらく、Androidアプリの回し方に関することだろう。
そんなわけで、USB Hostについて知りたい、と思っておられる方は、ここはここまででお帰りなさいまし。




と、これから長々と考えていこうかと思ったのだが。。。

よくわからん。
あまり苦労せずに回避するために考えついたのは、PaSoRiが接続されていないときはアプリを起動しない、だった。
逃げていると言われればそれまでなのだけど、PaSoRiが接続されていないのにアプリが起動しても困るのは確かだ。
だって、PaSoRiを使って読み込みアプリだし。
接続されていないのなら、接続されたときに起動すればいい。そのしくみはできている。
接続済みであれば、いつものようにonCreate()経由であれば問題ない。

いいのか、私はそれで・・・。
これがC/C++でできていれば、たぶん追求していっただろうと思う。
しかしここにあるのは、Javaだ。
申し訳ないが、ものすごく困らない限りは「回避」で済ませたい。

あとで困ったら、そのとき考えよう。


0 件のコメント:

コメントを投稿

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