我知道我可以做一个内部的接收机类从我的接收器调用任何方法
但我的主要活动是太他妈的大,做了很多事情。所以,我需要扩展广播接收器,但谁不是一个内部类的类。并且可以从我的主要活动调用一个方法。我不知道这是可能的,但我的活动是家庭活动和“singleInstance”活动,所以也许这个细节有人有办法来访问我的活动。
如果这是不可能的任何方式来分割在多个文件中我的主要有600个多行一些Java代码。 (和信息我有我的应用程序的一个alpha版本已经19 java文件,所以我已经尝试把它分解)
动态地创建广播接收器:
在你的广播接收器类中定义的类成员:
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();
制作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