当应用程序关闭时,android studio音频停止播放

rqdpfwrv  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(411)

我正在我的应用程序中制作一个音频播放器。它使用了一个viewlist,一切都很正常。我可以开始暂停,下一个音乐流。我正在加载一个url来播放音乐。当我关闭应用程序时,音乐停止播放。我需要继续比赛。我读过一些关于音频聚焦的文章。但我不知道如何将它添加到代码中。我的舱单上有唤醒锁。
我对android还很陌生,所以这是一个循序渐进的过程,但这个我就是搞不懂。另外,当我关闭应用程序并在播放音乐时再次启动它并重新启动时,应用程序崩溃。

  1. public void controlMusicPlayer(String musicUrl) {
  2. final String playUrl = musicUrl;
  3. Log.d("Song url received:", playUrl);
  4. if (!mediaPlayer.isPlaying()) {
  5. playercontrol.setVisibility(View.VISIBLE);
  6. btn.setBackgroundResource(R.drawable.pause);
  7. new Player()
  8. .execute(playUrl);
  9. playPause = true;
  10. Log.d("Play State:", "Starting song");
  11. } else {
  12. Log.d("Play State:", "Next song is being started");
  13. playPause = true;
  14. mediaPlayer.reset();
  15. btn.setBackgroundResource(R.drawable.pause);
  16. if (mediaPlayer.isPlaying())
  17. mediaPlayer.pause();
  18. playPause = false;
  19. new Player()
  20. .execute(playUrl);
  21. }
  22. }
  23. public View.OnClickListener pausePlay = new View.OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. if (!playPause) {
  27. btn.setBackgroundResource(R.drawable.pause);
  28. if (intialStage)
  29. new Player()
  30. .execute(Urlmusic);
  31. else {
  32. if (!mediaPlayer.isPlaying())
  33. mediaPlayer.start();
  34. }
  35. playPause = true;
  36. } else {
  37. btn.setBackgroundResource(R.drawable.play);
  38. if (mediaPlayer.isPlaying())
  39. mediaPlayer.pause();
  40. playPause = false;
  41. }
  42. }
  43. };
  44. /**
  45. * preparing mediaplayer will take sometime to buffer the content so prepare it inside the background thread and starting it on UI thread.
  46. * @author piyush
  47. *
  48. */
  49. class Player extends AsyncTask<String, Void, Boolean> {
  50. private ProgressDialog progress;
  51. @Override
  52. protected Boolean doInBackground(String... params) {
  53. // TODO Auto-generated method stub
  54. Boolean prepared;
  55. try {
  56. mediaPlayer.setDataSource(params[0]);
  57. mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  58. @Override
  59. public void onCompletion(MediaPlayer mp) {
  60. // TODO Auto-generated method stub
  61. intialStage = true;
  62. playPause=false;
  63. btn.setBackgroundResource(R.drawable.play);
  64. mediaPlayer.stop();
  65. mediaPlayer.reset();
  66. }
  67. });
  68. mediaPlayer.prepare();
  69. prepared = true;
  70. } catch (IllegalArgumentException e) {
  71. // TODO Auto-generated catch block
  72. Log.d("IllegarArgument", e.getMessage());
  73. prepared = false;
  74. e.printStackTrace();
  75. } catch (SecurityException e) {
  76. // TODO Auto-generated catch block
  77. prepared = false;
  78. e.printStackTrace();
  79. } catch (IllegalStateException e) {
  80. // TODO Auto-generated catch block
  81. prepared = false;
  82. e.printStackTrace();
  83. } catch (IOException e) {
  84. // TODO Auto-generated catch block
  85. prepared = false;
  86. e.printStackTrace();
  87. }
  88. return prepared;
  89. }
  90. @Override
  91. protected void onPostExecute(Boolean result) {
  92. // TODO Auto-generated method stub
  93. super.onPostExecute(result);
  94. if (progress.isShowing()) {
  95. progress.cancel();
  96. }
  97. Log.d("Prepared", "//" + result);
  98. mediaPlayer.start();
  99. intialStage = false;
  100. }
  101. public Player() {
  102. progress = new ProgressDialog(MainActivity.this);
  103. }
  104. @Override
  105. protected void onPreExecute() {
  106. // TODO Auto-generated method stub
  107. super.onPreExecute();
  108. this.progress.setMessage("Buffering...");
  109. this.progress.show();
  110. }
  111. }
  112. @Override
  113. protected void onPause() {
  114. // TODO Auto-generated method stub
  115. super.onPause();
  116. if (mediaPlayer != null) {
  117. mediaPlayer.reset();
  118. mediaPlayer.release();
  119. mediaPlayer = null;
  120. }
  121. }
  122. ////////////////////////////////// end music play list /////////////////////////////////////////

谢谢你的帮助。

e1xvtsh3

e1xvtsh31#

看起来你释放了 mediaPlayeronPause 方法。关闭应用程序时始终调用此方法。有关活动生命周期的更多信息,请访问google。因此,如果您想在活动暂停时继续播放音频,请更换 onPause 方法 onDestroy (调用finish()时调用此函数。

sxpgvts3

sxpgvts32#

运行后台服务并在该服务中播放音频(媒体播放器),您可以使用前台通知控制该通知的暂停播放或下一步等

相关问题