2011-12-14 11 views
7

私のアプリケーションのインストール時にアクションを実行する必要があります。私は使用してみましたMY APPがインストールされている場合はアンドロイドの意図

Intent.PACKAGE_ADDED 

しかし、私はインストールされているアプリに意図を受け取りません。私は私のアプリが初めてインストールされたときにコードを実行したい。

このユースケースはオンラインサービスに登録しています。私はBOOT_COMPLETEDのためにリストアップすることができます。これは、アプリがすでにインストールされている場合には問題ありませんが、ユーザーがアプリを最初にインストールしたときに処理する必要があります。

この後、 Can you run an intent or script when your app gets installed on Android?

次TIMER_TICK時にそれを実行しないように登録を行い、フラグを設定し、TIMER_TICK及び第1のブロードキャストをリッスンを示唆しています。これは問題があるように見えます。なぜなら、受信機で何かをしてもいなくても、1分ごとに受信機を起動し、その過程でバッテリーを使い切っているからです。

もっと良い解決策はありますか?

答えて

5

あなたが捕まえることができる信頼できる出来事はありません。 TIMER_TICKでもAndroid 3.1以下でしか動作しません。 3.1から。あなたのアプリがアクティブ状態になるまで、システムブロードキャストを受信することはできません(つまり、少なくとも1回手動で起動する必要があります)。アンドロイド3.1から始めて停止したアプリケーション

起動制御は、システムのパッケージマネージャは停止状態にある アプリケーションを追跡し、バックグラウンド・プロセスからの彼らの立ち上げを制御する する手段を提供しますその他 アプリケーション。

[...]システムは、すべての ブロードキャストインテントにFLAG_EXCLUDE_STOPPED_PACKAGESを追加すること

注意。 サービスのバックグラウンドからのブロードキャストが、不注意に、または不必要に停止したアプリケーション のコンポーネントを起動しないようにするためです。 [..]

アプリケーションそれらが最初にインストールされているが、 まだを開始し、それらをユーザが手動 によって停止された場合(にアプリケーションの管理)されていない場合に停止状態にあります。 3.1. release notes

から

私は、ユーザーが初めてあなたのアプリを起動したとき、あなたのintitial仕事をすることをお勧めします。

+0

私はあなたが誤植をしていると思います - あなたの最初の文章は "あなたが捉えることさえ信頼できるものはありません"ではないでしょうか? – CommonsWare

+0

@CommonsWare Ops、あなたはもう一度です。ありがとう! :) –

+1

ユーザーが最初にアプリケーションを起動したときに、最初の作業を行うというアレクセツの提案に従う場合は、そのための新しいブロードキャストがあります:[ACTION_PACKAGE_FIRST_LAUNCH](http://developer.android.com/ reference/android/content/Intent.html#ACTION_PACKAGE_FIRST_LAUNCH)。 – kabuko

0

Google Androidマーケットアプリがインストールされていると思われる場合は、INSTALL_REFERRERを使用できます。詳細については、Get referrer after installing app from Android Marketを参照してください。

+0

これはAndroid 3.1以降では機能しなくなりました。ユーザーが最初に手動でアプリケーションを起動するまで、ブロードキャストを受信することはできません。 – CommonsWare

+0

ああ、私はCommonsWareのことを知らなかった、ありがとう。ブロードキャストキューは何とか起動し、アプリの起動時に受信されますか? – kabuko

+0

おそらく。私はそれを研究していない。一般的に、放送はキューに入れられませんが、マーケットはそれに特別な何かをするかもしれません - 私は確信していません。 – CommonsWare

1

新しい市場では、起動時にAndroid 3.1以降でINSTALL_REFERRERインテントが発生します。だから私たちのアプリでそれを受け取ることができます。ただし、アプリが停止状態のときに2.2のインストール時にはまだ起動します。それで私はFroyoの場合にそれを受け取ることができません。

関連する問題