2017-09-20 5 views
0

私はラジオアプリを作っています。私は、アクティビティを変更したときにストリームを実行したままにしておきたいと思います!私はサービスを利用することができますが、私のためにその複合体を読むことができます!だから私はAsyncTaskを好む、私はどのようにAsyncTaskが活動をキャンセルするときに生きることができますか?アクティビティのキャンセル時にAsyncTaskを有効にする方法はありますか?

static class Player extends AsyncTask<String, Void, Boolean> { 
     @Override 
     protected Boolean doInBackground(String... strings) { 
      Boolean prepared = false; 

      try { 
       mediaPlayer.setDataSource(strings[0]); 
       mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mediaPlayer) { 
         Log.d("myTag", "This is my listnner"); 
         initialStage = true; 
         playPause = false; 
         id_play.setImageResource(R.drawable.play); 
         mediaPlayer.stop(); 
         mediaPlayer.reset(); 
        } 
       }); 

       mediaPlayer.prepare(); 
       prepared = true; 

      } catch (Exception e) { 
//    Log.e("MyAudioStreamingApp", e.getMessage()); 
       prepared = false; 
      } 

      return prepared; 
     } 

     @Override 
     protected void onPostExecute(Boolean aBoolean) { 
      super.onPostExecute(aBoolean); 

      if (progressDialog.isShowing()) { 
       progressDialog.cancel(); 
      } 

      mediaPlayer.start(); 
      initialStage = true; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog.setMessage("Buffering..."); 
      progressDialog.show(); 
     } 
    } 
+0

*サービスは使用できますが、私にとっては複雑です!だから私はAsyncTask *とにかくサービスを使用することを好む –

+0

Asynktaskはメインスレッドで動作します。サービスを利用する必要があります。 – Jayshree

+0

AsyncTaskはアクティビティにバインドされていますが、達成したいものに対しては適切ではありません – MatPag

答えて

0

これは本当に悪いアプローチです。 AsyncTaskは短い生きたプロセスのためのものです。 MediaPlayerには適していません。一時停止、停止、再開、再開もしたいからです。また、ユーザビリティの観点から、ロックスクリーンまたは最近のアクティビティリストにMediaPlayerのステータスバーを表示したいと考えています。

これを念頭に置いて、Serviceを使用する必要があります。この場合、フォアグラウンドサービスが必要です。それに良いアンドロイドの開発者ガイドもあります。

https://developer.android.com/guide/topics/media/mediaplayer.html

関連する問題