0

我正在开发两个应用程序。第一个有一个按钮,当按下它时会启动一个带有一些数据的隐式意图。意图由inten-filter注册在其他应用程序的主要活动上捕获。

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

我试图通过startActtivityForResult()andOnActivityResult()方式来实现这一点,但没有成功。实际上,此方法仅在子活动完成时才有效。

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

提前致谢。

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

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

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

4

3 回答 3

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;
    }
}
于 2012-04-30T11:46:44.697 回答
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

于 2013-10-07T05:17:35.257 回答
-1

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

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.
于 2012-04-30T11:29:25.313 回答