我正在制作一个android应用程序,它具有以下执行流程:
Receiver接收到意图,并(在某些条件下)调用startsActivity() for MyMain Activity,清单中的Main Activity已声明为android:launchMode="singleInstance"。注意,要使此调用正常工作,传递的意图应该有一个Intent.FLAG_ACTIVITY_NEW_TASKMain 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);
}发布于 2014-10-25 18:25:22
对于这个问题,我使用了以下解决方法:
活动A是调用者
活动B是我希望得到结果的singleInstance活动。
在活动A中,我注册广播接收器如下
PickReceiver receiver=new PickReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("ActivityA_pick");
registerReceiver(receiver,filter);
class PickReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("ActivityA_pick")){
//get data from intent extras
}
}在ActivityB中,当需要发送我使用的数据时:
sendBroadcast("ActivityA_pick").putExtra("...data...");
finish();这样,当我想从我自己的活动中得到一个结果时,我就能得到我想要的结果。如果您希望从系统或其他应用程序获得结果,您可以使用一个没有启动模式singleInstance的虚拟活动来调整这个结果,让它启动活动以获得结果,当它得到结果时,它会将广播发送给调用者。
希望这能有所帮助
发布于 2013-10-18 10:22:27
作为主要的活动是一个单一的例子,是做它已被告知。
所以是的,您必须从Web活动开始主要活动,以便与任务执行保持一致
https://stackoverflow.com/questions/19446562
复制相似问题