我知道我可以做一个内部接收器类来调用接收器中的任何方法
但我的主要活动太大了,做了很多事情。 所以我需要一个扩展广播接收器但不是内部类的类。并且可以从我的主要活动中调用一个方法。我不知道是否可能,但我的活动是家庭活动和“单一实例”活动,所以也许有了这个细节,有人可以访问我的活动。
如果不可能以任何方式将多个java代码拆分成多个文件,那么我的主要代码超过600行。 (并且对于我的应用程序的alpha版本,我已经有19个java文件,因此我尝试将其拆分)
答案 0 :(得分:18)
动态创建BroadcastReceiver:
在您的BroadcastReceiver类中定义类成员:
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);
最后,当你的BR.onReceive被解雇时,你可以打电话给:
yourMain.methodOfMainActivity();
答案 1 :(得分:0)
创建BroadcastReceiver
的{{1}}内部类,使其可以通过其Activity
方法访问UI元素是没有意义的。如果这样做,您将无法将onReceive()
与其他任何活动重复使用。这样您将一次又一次地编写几乎相同的代码。
更好的方法是为BroadcastReceiver
进行回调,然后让您的活动订阅该回调。
我该怎么做?
1)创建回叫界面
BroadcastReceiver
2)在BroadcastReceiver中提供您的回调
public interface ReceiverCallback{
public void doSomething(Object object);
}
3)为回调事件订阅您的活动:
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
}
}
阅读更详细的讨论HERE