次の実行フローを持つ 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);
}