将结果发送回父活动而不完成子活动

时间:2012-04-30 10:20:11

标签: android android-intent android-service android-activity

我正在开发两款应用。第一个按钮有一个按钮,当按下时会启动隐藏的意图并附加一些数据。意图由在另一个应用程序的主要活动上注册的inten-filter捕获。

我需要的是,子活动会立即将一些数据发送回父级(在后台)而不会完成,并且必须保持在前台。

我试图通过startActtivityForResult()OnActivityResult()方式实现这一点而没有成功。实际上,只有在子活动结束时,此方法才有效。

我正在寻找其他解决方案,例如服务......但我是新手,我需要至少解决正确的道路。

提前致谢。

我给你一些进一步的细节:

第一个活动(父)启动以下意图:

Intent intent = new Intent();           
intent.setAction("xx.xx.xxxxx");
intent.putExtra("Data1", data1);
intent.putExtra("Data2", data2);
...             
startActivityForResult(intent,MANAGE_CODE);

和OnActivitityResult()方法是

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()调用是否有效

3 个答案:

答案 0 :(得分:0)

请参考以下代码并与之进行比较......

int SECOND_ACTIVITY = 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.

答案 1 :(得分:0)

运行一项服务,让它用您需要的额外内容广播一个意图,然后在父母的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 :(得分:0)

据我所知,当您在子活动中进行更改时,您希望更改反映在父活动中。任务亲和力可能会帮助你 检查以下链接:寻找任务亲和力

1)http://developer.android.com/guide/components/tasks-and-back-stack.html 2)http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack