繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM