1

基本的に、関連するアプリのファミリを更新および起動するためのカスタム アプリ ストアであるアプリを実装しました。また、それ自体を更新する必要がありますが、これは機能しますが、インストール プロセス中にアプリが警告なしに強制終了されます。この場合、ユーザーが更新後すぐに引き続き使用できるように、アプリを自動的に再起動したいと考えています。

そこで、最初のアプリのパッケージ名のパッケージ イベントをリッスンし、新しいアクティビティを開始するブロードキャスト レシーバーを 1 つだけ含む別のアプリケーションを作成しました。そのレシーバーは決して呼び出されません:

<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name">

<receiver android:name=".AppUpdateReceiver">
  <intent-filter>
    <action android:name="android.intent.action.PACKAGE_REPLACED"/>
    <action android:name="android.intent.action.PACKAGE_ADDED"/>
    <action android:name="android.intent.action.PACKAGE_INSTALL"/>
    <data android:scheme="package" />
  </intent-filter>
</receiver>

同様の実装を探していると、レシーバーのみを持つアプリケーションが実行されるかどうか、およびアプリケーションがまだ実行されていない場合にレシーバーが呼び出されるかどうかについて、直接矛盾する情報を見てきました。レシーバーのみを含むアプリケーションのコード例に出くわしたこともあり、マニフェストは私のものと非常によく似ています。別のパッケージがインストールされるたびにレシーバーが呼び出されるようにするには、このアプリケーションで何が必要でしょうか?

より良い解決策があれば、それを聞いてうれしいです。

4

1 に答える 1

1

Android のバージョンによっては、BroadcastReceiverを登録するためにアプリケーション コンポーネントを起動する必要がある場合があります。Activityこれは、ユーザーが手動で起動する必要があるランチャーが必要になることを意味します。

Honeycomb 以降 (私が思うに)、何らかの方法でアプリを手動で起動しない限り、アプリケーション コンポーネントを「アクティブ」にすることはできません。これは、安全でないコードがエンド ユーザーの知らないうちに実行される可能性があるためです。

これがあなたが経験していることだと思います。テストするには、単純な「Hello World」Activityをアプリに追加BroadcastReceiverします。を起動し、他のパッケージが更新された後に then が呼び出されるActivityかどうかを確認します。BroadcastReceiver

于 2012-09-05T19:02:10.817 に答える