0

アプリApp#1のアクション文字列SにBroadCastReceiver BCRを登録しました アプリApp#2から 正しいアクション文字列 ( S )でインテントをブロードキャストします

アプリApp#2が既に開かれている場合.. インテントが受信され、 BCRonReceive()から意味が呼び出されます

@Override
public void onReceive(Context context, Intent intent) {
     System.err.println("### ### MyBroadcastReceiver ### onReceive()");

App#2が強制的に閉じられた (Setting-Applications から) か、一度も開かれていない (新たに再起動されたデバイス)場合、同じアクション文字列 ( S )を持つ同じブロードキャストは、broadCastReceiver BCRに到達しません。

意図をブロードキャストするためのコード(フラグがないことに注意してください..必要かどうかわからなかった..&その文字列はSです)

String action = "customActionString.something"; 
Intent intent = new Intent(action);
context.sendBroadcast(intent);

私は何が欠けていますか?これはタグの問題ですか?

4

2 に答える 2

3

App#2 が強制的に閉じられた (Setting-Applications から) か、一度も開かれていない (新たに再起動されたデバイス) 場合、同じアクション文字列 (S) を持つ同じブロードキャストは、broadCastReceiver BCR に到達しません。

正しい。

私は何が欠けていますか?

おそらく、活動。

Dianne Hackborn の引用:

[Android] 3.1 以降では、アプリケーションをインストールすると「停止」状態になるため、ユーザーが明示的に起動するまで実行できません。強制停止を押すと、この状態に戻ります。

これは、Android 3.1 のリリース ノートで説明が不十分でした。

于 2012-10-09T14:35:40.493 に答える
0

FLAG_INCLUDE_STOPPED_PACKAGES を追加すると、「停止」状態のアプリからブロードキャストレシーバーにインテントが到達します。

&あなた(@CommonsWare)は正しいです。アクティビティを開くことを意図していたので、アクティビティを使用する方が優れていましたが、今ではこのコードを使用しています。すべての場合でうまく機能します(アプリを開いてバックグラウンドで-フロント (以前に開いていたアクティビティを含む)、閉じた状態のアプリ - (メイン アクティビティから) アプリを開きます、アプリがインストールされていません - トースト警告)

try {
      Intent intent = context.getPackageManager().getLaunchIntentForPackage(
"otherAppPackage");
      m_ContainerActivity.startActivity(intent);
} catch (Exception e) {
      Log.e("SomeTag", "otherAppPackage app not found");
      Toast.makeText(m_ContainerActivity, "<app name> is not installed on device", Toast.LENGTH_LONG).show();
}
于 2012-10-19T08:16:42.073 に答える