我正在制作一个 android 应用程序,它具有以下执行流程:
服务向 AlarmManager 注册 PendingIntent
当警报启动时, a
Receiver接收到意图,并且(在某些条件下)调用startsActivity()myMain Activity,在清单中已声明为android:launchMode="singleInstance". 请注意,要使此调用生效,传递的意图应具有Intent.FLAG_ACTIVITY_NEW_TASK启动时,
Main Activity稍微修改一下自身,并调用startActivityForResult一个我们将调用的 ActivityWebviewActivity(因为它包含一个 webview,但这不是重点)当用户完成与 , 的交互并
WebViewActivity在setResult()其finish()上被调用时,人们会期望 forMainActivity.onActivityResult()被调用。
但是当然这不会发生,正如这里的许多讨论中所记录的那样,原因显然是从 Activity 启动的singleInstanceActivity 在不同的 Task 中运行。
我认为一个解决方案是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);
}