Android 将结果发送回不完成子活动的父活动
我正在开发两个应用程序。第一个按钮有一个按钮,当按下该按钮时,会启动一个隐含的意图,并附加一些数据。该意图由另一个应用程序的主活动上注册的Android 将结果发送回不完成子活动的父活动,android,android-intent,android-service,android-activity,Android,Android Intent,Android Service,Android Activity,我正在开发两个应用程序。第一个按钮有一个按钮,当按下该按钮时,会启动一个隐含的意图,并附加一些数据。该意图由另一个应用程序的主活动上注册的inten过滤器捕获 我需要的是,子活动立即将一些数据发送回父级(位于后台),而不完成,并且必须保持在前台 我试图通过startActivityForresult()和OnActivityResult()的方式实现这一点,但没有成功。实际上,此方法仅在子活动完成时有效 我正在寻找其他解决方案,比如服务……但我是个新手,至少我需要找到正确的途径 提前谢谢 我向大
inten过滤器捕获
我需要的是,子活动立即将一些数据发送回父级(位于后台),而不完成,并且必须保持在前台
我试图通过startActivityForresult()
和OnActivityResult()
的方式实现这一点,但没有成功。实际上,此方法仅在子活动完成时有效
我正在寻找其他解决方案,比如服务……但我是个新手,至少我需要找到正确的途径
提前谢谢
我向大家提供一些进一步的细节:
第一个活动(父级)启动以下意图:
Intent intent = new Intent();
intent.setAction("xx.xx.xxxxx");
intent.putExtra("Data1", data1);
intent.putExtra("Data2", data2);
...
startActivityForResult(intent,MANAGE_CODE);
onActivityResult()方法是
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode) {
case MANAGE_CODE:
switch (resultCode) {
case 0:
...
break;
}
break;
}
}
子活动执行以下操作:
Intent caller = getIntent();
if ( caller.getAction().equals("xx.xx.xxxxx") ) {
Intent intent = new Intent();
intent.putExtra("data", "12345");
// Set result
getParent().setResult(0, intent);
}
我省略了实现细节…如果我不关闭子活动(例如使用finish()方法),我就看不到setResult()调用有效。请参考以下代码并与它们进行比较
int秒_活动=2
活动
Intent intent = new Intent();
intent.setClassName(A.this , B.class);
intent.setClassName(A.this , B.class);
intent.setClassName(A.this, B.class);
startActivityForResult(intent, SECOND_ACTIVITY);
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, intent);
Bundle extraBundle;
if(requestCode == SECOND_ACTIVITY){
Log.d("SECOND_ACTIVITY_LOG","THIS CLOSE !!");
if(resultCode == RESULT_OK){
extraBundle = intent.getExtras();
String str = extraBundle.getString("key1");
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
}
}
B activity
intent = new Intent();
intent.putExtras(extraBundle);
this.setResult(RESULT_OK, intent);//if return RESULT_OK , then A can receive.
运行一个服务,让它用您需要的额外内容广播一个意图,然后在父级的BroadcastReceiver onReceive中检索它们
例如:
public class serviceD extends Service{
private Intent intent_broadcast;
static final String BROADCAST_ACTION = "com.example.ServicesAndBroadcastIntent";
public void onCreate(){
super.OnCreate();
intent_broadcast = new Intent(BROADCAST_ACTION);
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
intent_broadcast.putExtra("EXTRA_MSG","data");
sendBroadcast(intent_broadcast);
stopSelf();
return startId;
}
}
据我所知,当您在子活动中进行更改时,您希望更改反映在父活动中。对于该任务,关联可能会帮助您
检查以下链接:查找任务关联
(一)
2) 家长应用程序将如何响应?它在后台,可能会被你无法控制的平台杀死。它将如何收到结果呢?请解释你想要达到的目标。我想你可能需要重新考虑你的方法,或者如你所说,作为服务。也许在两个活动之间使用ResultReceiver亲爱的Simon,也许你是对的。我无法执行此操作,因为父活动未运行。可能需要另一种方法。瓦卡斯,我会调查结果的。谢谢。这听起来很有趣。以下工作流是否正确?1) 应用程序A(具有BC接收器)的活动启动意图;2) 该意图由应用程序B的一个活动捕捉到,该活动出现在前台。应用程序A进入后台。3) 应用程序B启动一项服务,该服务仅用于广播包含某些数据的意图。4) 应用程序A(在后台)检索广播消息并更新其状态,并在应用程序B仍在前台时执行此操作。“这行得通吗?”阿布德听起来不错。试试看。只要应用程序A为相同的操作注册了广播接收器,就应该没有问题。我刚刚在android官方文档中读到,如果某个进程有一个正在执行onReceive方法的广播接收器,则该进程将被视为“前台”。另一种可能是使用绑定到同一服务的两个应用程序实现IPC,但这需要我仔细研究。不过我会尽力让你知道。谢谢