我正在开发两款应用。第一个按钮有一个按钮,当按下时会启动隐藏的意图并附加一些数据。意图由在另一个应用程序的主要活动上注册的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()调用是否有效
答案 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