0

開いたときに音楽を再生するアプリがあります。しかし、音楽を停止して戻るボタンを使用すると、例外が発生し、アプリが強制終了します。これは私のコードです:

@Override
protected void onCreate(Bundle SavedInstanceState) {
    super.onCreate(SavedInstanceState);
    setContentView(R.layout.media_player_layout);
    final Uri uri = getIntent() != null ? getIntent().getData() : null;
    final SharedPreferences premiumSettings = getSharedPreferences("PREMIUM", Context.MODE_PRIVATE);
    final boolean isPremium = premiumSettings.getBoolean("isPremium", false);
    Button play = (Button) findViewById(R.id.play);
    Button stop = (Button) findViewById(R.id.stop);
    if (isPremium) {
        musicPlayer = MediaPlayer.create(MusicPlayer.this, uri);
        musicPlayer.start();


        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(musicPlayer.isPlaying()){
                    musicPlayer.pause();
                }
                else {musicPlayer = MediaPlayer.create(MusicPlayer.this, uri);
                musicPlayer.start();
            }}
        });
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (musicPlayer.isPlaying()) {
                    musicPlayer.stop();
                    musicPlayer.release();
                }
            }
        });
        Button exit = (Button) findViewById(R.id.exit);
        exit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (musicPlayer != null && musicPlayer.isPlaying()) {
                    musicPlayer.stop();
                    musicPlayer.release();
                    musicPlayer = null;
                    finish();
                }
            }
        });
    }
    else {
        AlertDialog.Builder builder = new AlertDialog.Builder(MusicPlayer.this);
        builder.setTitle("Error");
        builder.setMessage("You are not premium user. Please enter the promocode or buy the full version");
        builder.setIcon(R.drawable.holo_dark_action_info);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                finish();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }}
    public void onBackPressed () {
        if(musicPlayer.isPlaying()) {
            musicPlayer.stop();
            musicPlayer.release();
        }
            musicPlayer = null;
        finish();
}
}

これは私のlogcatです:

09-30 18:00:33.106  23141-23141/com.tproductions.Openit E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.tproductions.Openit, PID: 23141
    java.lang.IllegalStateException
            at android.media.MediaPlayer.isPlaying(Native Method)
            at com.tproductions.Openit.MusicPlayer.onBackPressed(MusicPlayer.java:76)

どうすれば動作させることができますか? if-else ステートメントを試しましたが、どちらも機能しません。

4

2 に答える 2

1

Like 以下のコード onBackPressed() を使用

AudioManager.isMusicActive()あなたが望む仕事をします、詳細についてはこちらをよく見てください:AudioManager

以下に例を示します。

AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
if(manager.isMusicActive())
 {
     // do something - or do it not
 }
于 2014-09-30T16:14:21.683 に答える
0

を呼び出したisPlaying()後に呼び出すことはできません。release()MediaPlayer

停止ボタンを押した後に放してからコールisPlaying()インonBackPressed()すると、IllegalStateException. release()他にやりたいことがまったくない場合にのみ電話する必要があります。Mediaplayer

ドキュメントによると:

MediaPlayer を使い終わったら、このメソッドを呼び出すことをお勧めします。

ただし、この場合、まだ完了していません。

修正するには、次の への呼び出しを削除しますrelease()

stop.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
       if (musicPlayer.isPlaying()) {
           musicPlayer.stop();
           // musicPlayer.release(); <- remove this
        }
    }
});

補足として、 inまたはのように、アクティビティ ライフサイクル メソッドでrelease() 1 回だけ呼び出す方が簡単です。コードに呼び出しを追加すると、このような問題が発生します。onStop()onPause()release()

于 2014-09-30T16:22:09.880 に答える