1

Android 2.3.3 の sdcard/music ディレクトリの mp3 を再生するシンプルなメディア プレーヤーを開発しようとしています。問題は、電源ボタンを押すか、デバイスがスリープ状態になると、音楽が停止することです。グーグルで調べ、stackoverflow を検索した結果、ウェイク ロック オプションを使用する必要があることがわかりましたが、何をしても、デバイスがスリープ状態になると音楽が停止します (エミュレーターで F7 を押すと音楽も停止します)。あまりにも長い間これと戦ってきたので、助けを求めることにしました。ご意見をいただければ幸いです。ありがとう。これが私のコードです:

FileInputStream fis = new FileInputStream(songList.get(0));
FileDescriptor fd = fis.getFD();
if (mediaPlayer != null) {
 if (mediaPlayer.isPlaying()) {
  mediaPlayer.release();
  mediaPlayer = null;
 }
}

mediaPlayer = new MediaPlayer();
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.setDataSource(fd);
mediaPlayer.prepare();
playPauseButton.setImageResource(android.R.drawable.ic_media_pause);
mediaPlayer.seekTo(songPosition);
mediaPlayer.start();
appMsg.setText(songList.get(0));
4

1 に答える 1

4

サービスを使用してメディアをバックグラウンドで実行する必要があると思います。サービスを作成し、メディアコードをその中に入れて、それを開始ボタンと停止ボタンにアタッチすると、おそらく次のようになります。

public class MediaPlayerService extends Service {
     MediaPlayer myMediaPlayer;

     @Override
     public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
     }
     @Override
     public void onCreate() {
         FileInputStream fis = new FileInputStream(songList.get(0));
         FileDescriptor fd = fis.getFD();

         if (mediaPlayer != null) {
           if (mediaPlayer.isPlaying()) {
               mediaPlayer.release();
               mediaPlayer = null;
              }
            }

         mediaPlayer = new MediaPlayer();
         mediaPlayer.setDataSource(fd);
         mediaPlayer.prepare();
         playPauseButton.setImageResource(android.R.drawable.ic_media_pause);
         mediaPlayer.seekTo(songPosition);
         appMsg.setText(songList.get(0));
     }
     @Override
     public void onStart(Intent intent, int startid) {
         myMediaPlayer.start();
     }
     @Override
     public void onDestroy() {
         myMediaPlayer.stop();
     }
}

その後、メソッドを使用して開始ボタンが押されたときにそのサービスを開始し、アクティビティクラスのstartServiceメソッドを使用してサービスを停止しますstopService

于 2012-11-13T13:59:49.897 に答える