背景描述
Android大版本升级,在AndroidS的源码中发现好多模块都有@Inject。当前在学习systemui模块,发现好多类找不到new的地方,没有初始化。----一脸懵逼
咋办捏?
我想要在systemui中添加一个功能,监听广播弹出一个dialog,然后打开蓝牙开关。
systemui中蓝牙控制的接口BluetoothController,实现类BluetoothControllerImpl
//打开蓝牙
bluetoothController.setBluetoothEnabled(true);
但是全局没有new 这两个类的地方,我自定义一个类,不知道如何初始化蓝牙控制器。
人世间最凄惨的事情莫过于此,明没有思路,有想法,却不知道咋办。
这两个类的构造方法都是@Inject,其它使用蓝牙控制器的类,也差不多是这样的,直接在构造方法中声明入参,然后就直接在类里使用了,完全没看到创建对象的地方。—杯具啊
思路1—借鸡下蛋
在其它有BluetoothController对象的类里:
声明dialog变量—new 对象—入参传入需要的参数即可。
//自定义类
public MyDialogControllerImpl(Context context,BluetoothController bluetoothController,BroadcastDispatcher broadcastDispatcher) {
this.mContext = context;
this.mDataUtils = new DataUtils(context);
this.bluetoothController = bluetoothController;
this.mBroadcastDispatcher = broadcastDispatcher;
init();
}
思路2—照猫画虎
//自定义类
@Inject
public MyDialogControllerImpl(Context context,BluetoothController bluetoothController,BroadcastDispatcher broadcastDispatcher) {
this.mContext = context;
this.mDataUtils = new DataUtils(context);
this.bluetoothController = bluetoothController;
this.mBroadcastDispatcher = broadcastDispatcher;
init();
}
然后再SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java
@Provides
@SysUISingleton
static StatusBar provideStatusBar(
Context context,
...
MyDialogControllerImpl myDialogControllerImpl,//添加这一行
...
叮~
就可以了。哇偶,好神奇啊。为啥啊,它是怎么知道MyDialogControllerImpl我的类需要构造方法要几个什么类型的对象哇。。。