6

このアプリには、boot-complete イベントをリッスンし、バックグラウンド サービスを開始してデータを HTTP サーバーに送信する BroadcastReceiver があります。

私の質問は、アプリがユーザーによって実行されない場合 (インストールされている場合のみ)、BroadcastReceiver はブート イベントを受信しますか?

4

2 に答える 2

4

Android 3.1 以降、ユーザーは boot_complete ブロードキャストを受信するためにアプリケーションを 1 回起動する必要があります。

以下は、公式の javadoc からのものです。

Android 3.1 以降、システムのパッケージ マネージャーは停止状態のアプリケーションを追跡し、バックグラウンド プロセスや他のアプリケーションからの起動を制御する手段を提供します。

アプリケーションの停止状態は、アクティビティの停止状態と同じではないことに注意してください。システムは、これら 2 つの停止状態を別々に管理します。

プラットフォームは、送信者が停止したアプリケーションでコンポーネントをアクティブ化するためにインテントを許可するかどうかを指定できるようにする 2 つの新しいインテント フラグを定義します。

FLAG_INCLUDE_STOPPED_PACKAGES — 停止されたアプリケーションのインテント フィルターを解決対象の潜在的なターゲットのリストに含めます。FLAG_EXCLUDE_STOPPED_PACKAGES — 潜在的なターゲットのリストから、停止されたアプリケーションのインテント フィルターを除外します。これらのフラグのいずれも、または両方がインテントで定義されていない場合、デフォルトの動作では、潜在的なターゲットのリストに停止したアプリケーションのフィルターが含まれます。

システムは FLAG_EXCLUDE_STOPPED_PACKAGES をすべてのブロードキャスト インテントに追加することに注意してください。これは、バックグラウンド サービスからのブロードキャストによって、停止したアプリケーションのコンポーネントが不注意または不必要に起動されるのを防ぐためです。バックグラウンド サービスまたはアプリケーションは、FLAG_INCLUDE_STOPPED_PACKAGES フラグを追加して、停止したアプリケーションのアクティブ化を許可するインテントをブロードキャストすることで、この動作をオーバーライドできます。

アプリケーションは、最初にインストールされたがまだ起動されていないとき、およびユーザーが ([アプリケーションの管理] で) 手動で停止したとき、停止状態にあります。

javadoc リンク

詳しくはこちらのブログをご覧ください

于 2013-05-15T05:33:27.947 に答える
1

はい、ブートレシーバーはブートをリッスンするように登録されているため、デバイスを再起動すると、アプリを起動したかどうかに関係なく起動します。同様に、NFC リスナーをマニフェストに追加すると、誰かが NFC カードをスワイプするとアプリが反応します。マニフェストは、Android で指定されたものに反応するために使用されます。アプリが実行されている (または実行されたことがある) かどうかは関係ありません。素晴らしい質問ですが!:)

他の回答とドキュメントに従って編集します。これはもはや真実ではありません。混乱させて申し訳ありません。

于 2013-05-15T05:22:52.537 に答える