[英]How to use helper class as singleton in broadcast receiver?
我想使用匕首方法来帮助类。 波纹管是我目前用于Activity的代码。 但是我不明白我应该如何在辅助课程中使用它。
在接收方内部调用帮助程序类的地方。
AppComponent.java
@Singleton
@Component(modules = { AndroidSupportInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent extends AndroidInjector<DaggerApplication> {
void inject(MyApplication app);
@Override
void inject(DaggerApplication instance);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
ActivityBuilder.java
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = MainActivityModule.class)
abstract MainActivity bindMainActivity();
}
AppModule.java
@Module
public abstract class AppModule {
@Binds
abstract Context provideContext(Application application);
}
MainActivityModule.java
@Module
public abstract class MainActivityModule {
@Provides
static MainPresenter provideMainPresenter(MainView mainView) {
return new MainPresenterImpl(mainView);
}
@Binds
abstract MainView provideMainView(MainActivity mainActivity);
}
上面的代码是我用于活动的代码。 我现在也愿意为我的助手类使用相同的结构。 我做了很多研究,并尝试了一些失败的方法,因为我的Helper类需要2个参数。 第一个是上下文,另一个是IPhoneCallReceiver。 我知道可以使用@Binds
在@Module
中访问@Binds
,但是我在获取Context时遇到问题。 这里的Helper类是CallStateHelper
PhoneCallReceiver.java
public class PhoneCallReceiver extends BroadcastReceiver implements IPhoneCallReceiver {
CallStateHelper callStateHelper;
@Override
public void onReceive(Context context, Intent intent) {
callStateHelper.stateChange(intent);
}
}
CallStateHelper.java
public class CallStateHelper extends PhoneStateListener {
private IPhoneCallReceiver receiver;
public CallStateHelper(Context context, IPhoneCallReceiver receiver) {
this.receiver = receiver;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
}
}
我想通过@Inject
使用CallStateHelper,并将其作为Singleton
类。 我对Dagger非常陌生
我终于做到了。 您只需要提供DispatchingAndroidInjector<BroadcastReceiver>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.