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,但这需要我仔细研究。不过我会尽力让你知道。谢谢