用于在MainActivity和Broadcast接收器之间通信的接口

问题描述 投票:1回答:2

在使用可变效率的变通方法之后,我开始使用这个优秀的视频,让我了解如何在片段之间进行通信。 https://www.youtube.com/watch?v=VyyGP_d0Ia8(检查大约5.00,这是主要的想法)

这个想法看起来很优雅,我想知道我是否可以使用这种接口方法在广播接收器和我的主要活动之间传递数据。

为了使我的问题更具体,让我解释一下到目前为止我所拥有的。

我有一个MainActivity具有UpdateGUI()功能。由于我不能声明它是静态的,因为它采用非静态findviewbyId()方法,我已经实现了一个通信器接口,每当我在我的Other片段中更改某些内容时,消息将被传递到我的MainActivity中实现的响应方法,该方法只调用UpdateGUI()

我认为可以从广播接收器调用MainActivity的respond()方法。我的问题在于,当我想从片段中做到这一点时,我可以将它与MainActivity联系起来,这要归功于OnAttach方法。

据我所知,BroadcastReceivers没有onAttach方法,这就是我的问题。如何将广播接收器与mainActivity关联?

java android android-fragments android-intent
2个回答
0
投票

答案在于您可以在任何站点上找到的基本服务教程之一。这就是为什么你应该在互联网上搜索之前发布它(见你得到了downvotes)。

如何将广播接收器与我的mainActivity相关联

在Mainactivity中创建Broadcast接收器的子类,并在onReceive()方法中完成工作:

public class MainActivity extends FragmentActivity{

// your MainActivity Code

    public class MyReceiver extends BroadcastReceiver {


       @Override
        public void onReceive(Context context, Intent intent) {
        // do your stuff here
       }

    } // MyReceiver

} // MainActivity

0
投票

我遇到了类似的问题,我解决了这个问题。

  1. 使用setter在我的BroadcastReceiver中插入一个接口。 private OnAudioBecomingNoisyListener mOnAudioBecomingNoisyListener; public void setOnAudioBecomingNoisyListener(OnAudioBecomingNoisyListener onAudioBecomingNoisyListener) { mOnAudioBecomingNoisyListener = onAudioBecomingNoisyListener; } public interface OnAudioBecomingNoisyListener { void onAudioBecomingNoisy(); }
  2. 在我的活动中实现接口并调用setOn ... Listener(this)。 public class PlayerService extends Service implements OnAudioBecomingNoisyListener

后...

    mPlayerBroadcastReceiver = new PlayerBroadcastReceiver();
    mPlayerBroadcastReceiver.setOnAudioBecomingNoisyListener(this);
  1. 注册广播 registerReceiver(mPlayerBroadcastReceiver, mIntentFilter);
  2. 在onReceived中,调用方法。 public void onReceive(Context context, Intent intent) { switch(intent.getAction()) { case AudioManager.ACTION_AUDIO_BECOMING_NOISY: if(mOnAudioBecomingNoisyListener != null){ mOnAudioBecomingNoisyListener.onAudioBecomingNoisy(); break; } } }
© www.soinside.com 2019 - 2024. All rights reserved.