我正在制作一个 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 启动的singleInstance
Activity 在不同的 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);
}