0

私は2つのアプリに取り組んでいます。最初のボタンには、押されたときにデータが添付された暗黙的なインテントを起動するボタンがあります。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);

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

私が理解したように、子アクティビティに変更を加えたときに、変更を親アクティビティに反映させたいと考えています。そのため、タスク アフィニティが役立つ場合があります。以下のリンクを確認してください: タスク アフィニティを探します

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 に答える
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 に答える
-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 に答える