私はMosbyを使用して小さなアプリを作成しています。Android Mosby MVIはプレゼンターのサービスにバインドします
私はバインドしたいサービスがあります。私はこれを行う正しい場所が発表者にあると思います。しかし、私は本当にそれを行う方法を把握することはできません。
私がアーカイブしたいのは、サービスがバインドされているときです。メソッドを呼び出してその値をビューにプッシュして、現在の状態が正しいようにしたいとします。
サービスがイベントバス上でアップデートを送信するとき、私はそれをビューにもプッシュしたいと思います。
私は、後の部分でいくつかの例を見つけましたが、プレゼンターでサービスをバインド/アンバインドする方法については何も見つかりませんでした。
その上に私の刺しが活動中でこのようなものを作成することでした。
@NonNull
@Override
public MyPresenter createPresenter() {
return new MyPresenter(new MyService.ServiceHandler() {
@Override
public void start(ServiceConnection connection) {
Intent intent = new Intent(MyActivity.this, MyService.class);
startService(intent);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
@Override
public void stop(ServiceConnection connection) {
unbindService(connection);
}
});
をそしてプレゼンターにこのような何かを:
private ServiceConnection connection;
private boolean bound;
private MyService service;
public MyPresenter(MyService.ServiceHandler serviceHandler) {
super(new MyViewState.NotInitialiezedYet());
this.serviceHandler = serviceHandler;
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
MyService.LocalBinder binder = (MyService.LocalBinder) service;
service = binder.getService();
bool isInitialized = service.isInitialized();
// how do i push isInitialized to view?
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
}
@Override
public void attachView(@NonNull SplashView view) {
super.attachView(view);
serviceHandler.start(connection);
bound = true;
}
@Override
public void detachView(boolean retainInstance) {
super.detachView(retainInstance);
if(bound) {
serviceHandler.stop(connection);
bound = false;
}
}
@Override
protected void bindIntents() {
//Not sure what this would look like?
}
public void onEventInitialized(InitializedEvent event) {
//how do I push this to the view?
}
が、私は正しい道にいるだろうか?これを行う正しい方法は何でしょうか? onServiceConnectedのビューにサービスからの値をどのように送信するのですか?また、onEventInitializedのイベントバスでイベントを取得したらどうなりますか?
迅速な回答をいただきありがとうございます。また、すべてのブログ記事に感謝します! 私はこれを試してみます。 –
オクラ、私はそれの周りに私の頭をラップしようとしたが、私は理解していない。 私はストリーミングオーディオであるバックグラウンドサービスを持っています。私はバインドを介してサービスを一時停止し、次に呼び出すことができる必要があります。サービスからは、次のトラック、進捗状況などのイベントが発生します。 現在、アクティビティとサービスの間にはイベントバスがあります。 サービスから観測可能な方が良いですか? インタラクタは、UIから次のトラックイベントを送信してサーバーに送信し、新しいトラックモデルを返すことができるように見えますか? 私はRxを初めて使っているので、新しいことがたくさんあります。 –
次に、オーディオプレイヤーをバックグラウンドで実行し続けるサービスが唯一必要です。 'Observable getStateObservable()'メソッドを使って 'AudioPlayer'クラスを作成します(PLAYING song XYまたはPAUSEDのような現在のプレーヤー状態を返します)。 'Presenter'によって使用される' AudioPlayerInteractor'は、その状態をサブスクライブしてビューに表示します。あなたの 'Service'は' AudioPlayerInteractor'と同じ 'AudioPlayer'インスタンスを共有しますが、' audioPlayer.pause() 'のようにコントロールします。サービスをバインドする必要はありません。Android Intentsを使用して 'Service'と通信するだけです。 –
sockeqwe