音楽再生-利用サービスO
これは私が書いた組織文章の移植です.
今回の位置づけでは、前回の位置づけに続き、Androidのサービスで音楽を再生する.
今回のリリースでは、前回リリース中に問題が発生したアプリが終了した後も、サービスを利用して音楽が可能になります.
データ・フローリストから選択する音楽(モデル)は、 をサービスに転送する.サービスは、その音楽(モデル)をSub Threadとしてバックグラウンドで 実行する.
始まりました.サービスを利用しているので、アプリが終わっても音楽が流れます.
PlayMainViewActivityでは、サービスからオブジェクトにモデル(Music)を渡すためにシーケンス化が必要です.
だから.
Parcelableを使用していないのになぜエラーが発生したのか...
だからSerializableをParcelableに変えて問題を解決します!
△実は、Parcelableのほうが性能がいいです.しかし、Serializableはコード量が少ないだけなので、使いたいです.私はこの習慣を捨てるべきです.そのおかげでオブジェクト化を学びました.
動画ではなく、確認はできませんが、サービス実行でアプリが死んでも音楽は死んでしまいません.
導入する
今回の位置づけでは、前回の位置づけに続き、Androidのサービスで音楽を再生する.
データ・フロー
今回のリリースでは、前回リリース中に問題が発生したアプリが終了した後も、サービスを利用して音楽が可能になります.
データ・フロー
始まりました.サービスを利用しているので、アプリが終わっても音楽が流れます.
問題と解決
PlayMainViewActivityでは、サービスからオブジェクトにモデル(Music)を渡すためにシーケンス化が必要です.
だから.
// 음악 데이터
public class Music implements Serializable {
// ...
}
Serializableを作ったけど...シリアルオブジェクトの書き込み中にParcelableエラーと競合するエラーが発生しました.次のようになります.Parcelableを使用していないのになぜエラーが発生したのか...
// 음악 데이터
public class Music implements Serializable {
// ...
private Uri musicUri;
private Uri albumUri;
// ...
}
理由はUriオブジェクトです.だからSerializableをParcelableに変えて問題を解決します!
△実は、Parcelableのほうが性能がいいです.しかし、Serializableはコード量が少ないだけなので、使いたいです.私はこの習慣を捨てるべきです.そのおかげでオブジェクト化を学びました.
// 음악 데이터
public class Music implements Parcelable {
// ...
}
コード#コード#
public class PlayMainViewActivity extends BaseActivity implements MusicInfoAdapter.IConnActivityAndService {
// ...
public void initData() {
currentPosition = getIntent().getIntExtra("position", 0);
currentMusic = musicDataController.getList().get(currentPosition);
serviceIntent = new Intent(this, PlayerService.class);
serviceIntent.putExtra("currentMusic", currentMusic);
// 음악 플레이어 상태 설정
currentStatus = Const.ACTION_MUSIC_SET;
// 음악 상태를 service의 Action으로 설정
serviceIntent.setAction(currentStatus);
// 서비스 시작
startService(serviceIntent);
}
public void initViewPager() {
MusicInfoAdapter musicInfoAdapter = new MusicInfoAdapter(this);
playerViewPager.setAdapter(musicInfoAdapter);
playerViewPager.setCurrentItem(currentPosition);
playerViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
// Viewpager에서 다른 음악이 선택되면 실행되는 메소드
@Override
public void onPageSelected(int position) {
currentMusic = musicDataController.getList().get(position);
serviceIntent.putExtra("currentMusic", currentMusic);
serviceIntent.setAction(currentStatus);
startService(serviceIntent);
}
@Override
public void onPageScrollStateChanged(int state) { }
});
}
// ...
}
スクリーンショット
動画ではなく、確認はできませんが、サービス実行でアプリが死んでも音楽は死んでしまいません.
Reference
この問題について(音楽再生-利用サービスO), 我々は、より多くの情報をここで見つけました https://velog.io/@heepie/음악-재생-Service-사용-Oテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol