如何在广播接收器中使用辅助类作为单例?

时间:2018-04-15 08:28:20

标签: java android dagger

我想使用dagger方法来帮助类。 Bellow是我目前用于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。我知道可以使用@Module@Binds中访问IPhoneCallReceiver,但我遇到了获取上下文的问题。 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 Class。我是Dagger的新手

1 个答案:

答案 0 :(得分:0)

我终于做到了。 您只需提供DispatchingAndroidInjector<BroadcastReceiver>

即可