にしても、今作はジョインアベニューとかいう神っぽい要素が追加されててクリア後が楽しみだなぁ・・・
月別アーカイブ: 2012年6月
ACTION_EXTERNAL_APPLICATIONS_AVAILABLEについて
6/6の記事でACTION_EXTERNAL_APPLICATIONS_AVAILABLE というインテントを拾えばSDカードのアプリを再起動できそうだと書きましたが、あれはできませんでした。
ので、残念ながらEasyRotationは外部ストレージにインストールした場合、再起動時の自動起動オプションは無効になります。
申し訳ありません。
コードを書き直すも上手く動かず、疑問に思いながらインテントの方のリファレンスを読み込んだところ、外部ストレージにインストールされているアプリではこのインテントを受け取れないようなことが書いてありました。
サービスはこのインテントで走らせられる様なことが書いてあった気がしたんですが、アプリが本体側にあってストレージのデータを参照する必要があるサービスを動かせるとかそんなところだったのかなぁ……
以下、Androidのリファレンスから引用。太字部分が該当箇所です。
public static final String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
Since: API Level 8
Broadcast Action: Resources for a set of packages (which were previously unavailable) are currently available since the media on which they exist is available. The extra data EXTRA_CHANGED_PACKAGE_LIST contains a list of packages whose availability changed. The extra data EXTRA_CHANGED_UID_LIST contains a list of uids of packages whose availability changed. Note that the packages in this list do not receive this broadcast. The specified set of packages are now available on the system.
6/6の記事でACTION_EXTERNAL_APPLICATIONS_AVAILABLE というインテントを拾えばSDカードのアプリを再起動できそうだと書きましたが、あれはできませんでした。
インテントの方のリファレンスを読み込んだところ、外部祖トレー時にインストールされているアプリではこのインテントを受け取れないようなことが書いてありました。
以下リファレンスから引用
public static final String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
Since: API Level 8
Broadcast Action: Resources for a set of packages (which were previously unavailable) are currently available since the media on which they exist is available. The extra data EXTRA_CHANGED_PACKAGE_LIST contains a list of packages whose availability changed. The extra data EXTRA_CHANGED_UID_LIST contains a list of uids of packages whose availability changed. Note that the packages in this list do not receive this broadcast. The specified set of packages are now available on the system.
Includes the following extras:
EXTRA_CHANGED_PACKAGE_LIST is the set of packages whose resources(were previously unavailable) are currently available. EXTRA_CHANGED_UID_LIST is the set of uids of the packages whose resources(were previously unavailable) are currently available.
This is a protected intent that can only be sent by the system.
Constant Value: “android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE”
アプリ「EasyRotation」で、SDカードにアプリをインストールした場合に再起動時に自動起動しない問題について
タイトルどおり、当方のAndroidアプリケーション「EasyRotation」についてのご報告です。
問題点は、Android自体の仕様によって『SDカードにアプリをインストールした場合、BroadcastReceiverはACTION_BOOT_COMPLETEDを受け取れない』ということです。
公開中のAndroidアプリケーション「EasyRotation」では、本来SDカード(いわゆる外部ストレージ)へのインストールを想定していませんでした。
最近になってマーケットのコメントに外部へのインストールを許可してほしいとのコメントを頂き、(仮)の表記をつけながらも対応していました。
が、外部ストレージへアプリケーションがインストールされている場合は、起動完了を示すブロードキャストを受信できません。
つまり、本アプリケーションでの「端末再起動時に勝手に走ってくれる」機能は、端末本体にアプリケーションをインストールしている場合のみ対応ということになります。
本来は詳細を調べてさくっと仕様として注意書きを書いておくべきだったんでしょうが、問題点は把握していながら色々と忙しくて後回しにしていたせいで、コメントで指摘していただくまで放置しているというこの体たらく・・・・・・
本当に申し訳ないです。
帰ったらさくっと注意書き入れます・・・・・・
外部ストレージへのインストールを行っていても基本的な機能自体には影響が無い上に、Android側の仕様で対応が難しい為、バージョンアップなどはせずにマーケットのページに仕様である旨を記載する予定です。
ただ、ACTION_EXTERNAL_APPLICATIONS_AVAILABLEというブロードキャスト用のインテントを取ってくることで外部ストレージが再マウントされたタイミングを取れそうなので、可能であれば似た様な機能をこれで実装したいと考えています。
これに関してはできるだけ早いうちに片付けてしまうつもりですので、もう少しお待ちください。
6/8 追記
調査したところ、上記の方法ではAndroidの仕様上実現できないようなので、EasyRotationは外部ストレージにインストールした場合、再起動時の自動起動オプションは無効になります。
申し訳ありません。