次の実行フローを持つ Android アプリケーションを作成しています。
サービスは PendingIntent を AlarmManager に登録します
アラームが起動されると、 a
Receiverがインテントを受け取り、(いくつかの条件が与えられた場合)startsActivity()myMain Activityを呼び出します。これは、マニフェストで として宣言されていandroid:launchMode="singleInstance"ます。この呼び出しが機能するためには、渡されたインテントにIntent.FLAG_ACTIVITY_NEW_TASK開始すると、
Main Activity自分自身を少し変更し、呼び出すstartActivityForResultアクティビティを呼び出しますWebviewActivity(これには webview が含まれているためですが、それは重要ではありません)。ユーザーが との対話を終了すると
WebViewActivity、setResult()とfinish()が呼び出され、 が呼び出されることが予想さMainActivity.onActivityResult()れます。
ただし、ここでの多くの議論で文書化されているように、もちろんこれは起こりません。その理由は明らかに、アクティビティから起動されたsingleInstanceアクティビティが別のタスクで実行されるためです。
私が思う解決策は、代わりにWebActivity開始することです。MainActivity
問題は、onActivityResult適切なタイミングで呼び出され続ける方法があるかどうかです。その場合、実行フローの開始点からどの部分を変更する必要がありますか?
MainActivityは同時に複数のインスタンスを持つべきではないことに注意してください(これは基本的にサービスへのインターフェイスです) が、launchModeに設定されている場合、必要なstandardため、レシーバーFLAG_ACTIVITY_NEW_TASKはまさにそれを行います。
のマニフェスト宣言MainActivity:
<activity android:name=".activities.MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
android:uiOptions=”splitActionBarWhenNarrow”
</activity>
MainActivity呼び出しによる受信機の起動
onReceive(Context context, Intent intent)
{
intent.setClass(context, MainActivity.class);
int flag = Intent.FLAG_ACTIVITY_NEW_TASK;
intent.setFlags(flag);
context.startActivity(intent);
}