从广播接收器类调用一个方法活动

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

我知道我可以做一个内部的接收机类从我的接收器调用任何方法

但我的主要活动是太他妈的大,做了很多事情。所以,我需要扩展广播接收器,但谁不是一个内部类的类。并且可以从我的主要活动调用一个方法。我不知道这是可能的,但我的活动是家庭活动和“singleInstance”活动,所以也许这个细节有人有办法来访问我的活动。

如果这是不可能的任何方式来分割在多个文件中我的主要有600个多行一些Java代码。 (和信息我有我的应用程序的一个alpha版本已经19 java文件,所以我已经尝试把它分解)

android broadcastreceiver inner-classes
2个回答
18
投票

动态地创建广播接收器:

在你的广播接收器类中定义的类成员:

YourMainActivity yourMain = null;  

和方法:

setMainActivityHandler(YourMainActivity main){
yourMain = main;
}  

从您的MainActivity做:

private YourBroadcastReceiverClassName yourBR = null;
yourBR = new YourBroadcastReceiverClassName();
    yourBR.setMainActivityHandler(this);    
    IntentFilter callInterceptorIntentFilter = new           IntentFilter("android.intent.action.ANY_ACTION");
    registerReceiver(yourBR,  callInterceptorIntentFilter);

最后,当yourBR.onReceive被触发,你可以拨打:

yourMain.methodOfMainActivity();

0
投票

Make your BroadcastReceiver independent of Activity

enter image description here制作BroadcastReceiver内部类的Activity的,以便它可以从它的onReceive()方法访问UI元素只是没有任何意义。如果你这样做,你不能重复使用其他活动BroadcastReceiver。你最终会一次又一次地编写几乎相同的代码。 这样做将是一种更好的方式,使一个回调BroadcastReceiver,让您的活动订阅此回调。

我怎么做?

1)创建一个回调接口

public interface ReceiverCallback{

      public void doSomething(Object object);

}

2)在广播接收器提供您的回调

public class MyBroadcastReceiver extends BroadcastReceiver {

     private ReceiverCallback callback;

     public MyBroadcastReceiver(ReceiverCallback callback){

          this.callback = callback;        //<--Initialize this
     }

     @Override
     public void onReceive(Context context, Intent intent) {

           // Your listening logic goes here (New WIFI Scan data available, 
                                              Headphone plugged in etc)              

          // Send any data or No data(null)
          listener.doSomething(null);             //<--Send callback event

     }
}

3)订阅您的活动的回调事件:

public YourActivity extends AppCompatActivity implements ReceiverCallback{

      // Your Activity code 

      public void updateUI() {     //<-- You want this to get Triggered 
             // Update UI code 
      }

      @Override
      public void doSomething(Object object){     
            updateUI();            //<-- Callback does that
      }

}

相关链接:

阅读更详细的讨论HERE

© www.soinside.com 2019 - 2024. All rights reserved.