与堆叠活动进行通信

时间:2014-06-06 07:33:44

标签: android

我想知道有没有办法在两个活动之间进行通信,其中一个活动暂停(堆叠)?

我试图通过sendBroadcast实现它并接收数据但到目前为止没有运气。 我在onCreate()中注册接收器并在onDestroy()中取消注册它,这样它在第二个活动的Activity工作时仍然可以正常工作。 我已将过滤器添加到接收器,我的意图有适当的标志。

甚至可以使它工作吗? 或者有更好的方法来实现这种沟通吗?

=============编辑按要求添加代码==========

======的 CODE ==

- 的 RECEIVER

    private BroadcastReceiver localBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
          if (intent.getAction().equals(Globals.DATA_TO_ADSLIST)) {
            int value = intent.getIntExtra(Globals.AD_ORGANIZER_TO_ADSLIST_VALUE, 0);
            if (value > 0) {
                listViewAdapter.notifyDataChange();
            } 
          }
       }

- 的 BROADCAST

        Intent dataToAdsList = new Intent(Globals.DATA_TO_ADSLIST);
        dataToAdsList.putExtra(Globals.AD_ORGANIZER_TO_ADSLIST_VALUE, 1);
        context.sendBroadcast(dataToDbService);

- 的 UNREGISTER

 @Override
 public void onDestroy() {
    super.onDestroy();
    if (getActivity().isTaskRoot()) {
        AQUtility.cleanCacheAsync(getActivity());
    }
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(localBroadcastReceiver);
}

- 的 REGISTER

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    IntentFilter filter = new IntentFilter();
    filter.addAction(Globals.SEND_ADS_LIST);
    filter.addAction(Globals.DATA_TO_ADSLIST);
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(localBroadcastReceiver, filter);
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

暂停活动后,您无法直接与其进行通信,因为它只是暂停了。如果您想要调用另一个活动,然后将数据传回第一个活动,请使用startActivityForResult开始第二个活动 - 然后在" child"活动,在setResult之前使用finish。对于setResult来电,您可以将Intent传递给您希望传递给"父母的任何信息"活动。最后,在父活动中,覆盖onActivityResult - 这将在" child"时自动调用。活动终止 - 在那里,您可以从Intent检索数据并相应地对其进行操作。

答案 1 :(得分:0)

<强> SEND_BROADCAST

  Intent i = new Intent("BROADCAST_TEST");
  i.putExtra("DATA","TEST MSG");
  sendBroadcast(i);

注册BROADCAST

 registerReceiver(uiUpdated, new IntentFilter("BROADCAST_TEST"));

 private BroadcastReceiver uiUpdated= new BroadcastReceiver() 
 {
    @Override
    public void onReceive(Context context, Intent intent) 
    {
    String mData;
    Type=intent.getExtras().getString("DATA");
    }
    };

希望这有帮助!干杯!