用于在MainActivity和广播接收器之间进行通信的接口

时间:2016-02-25 07:42:21

标签: java android android-fragments android-intent

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

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

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

我有一个MainActivity具有UpdateGUI()功能。因为我不能将它声明为静态因为它采用了非静态findviewbyId()方法,所以我实现了一个通信器接口,每当我在其他片段中更改某些内容时,消息就会传递到我MainActivity中实现的响应方法中致电UpdateGUI()

我认为可以从广播接收器调用MainActivity的respond()方法。我的问题在于,当我想从片段中执行此操作时,我可以将其与MainActivity相关联,这要归功于OnAttach方法。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
    
  3. ...后

        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;
                  } 
          }
      }