1

これに関する他の多くの投稿を見てきましたが、これを機能させることができません。MediaPlayer を使用して単純な曲を再生しようとしています。ボタン メソッドの startMusic と stopMusic が呼び出されていることを確認できるので、これは UI からのボタンの問題ではありません。

player.play(); と player.stop() は何もしません。

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
import android.media.MediaPlayer;


public class MainActivity extends Activity
{
    private static MediaPlayer player = new MediaPlayer();
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        player.create(MainActivity.this,R.raw.sadsadsad);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    public void changeLabel(View view)
    {
        TextView myTextView = (TextView) findViewById(R.id.myTextView);
        myTextView.setText("Label changed");
    }

    public void playMusic(View view)
    {
        player.start();
    }

    public void stopMusic(View view)
    {
        player.stop();
    }
}

ここでも、再生ボタンと停止ボタンが機能し、ブレークポイントが .start() と .stop() にヒットします。

4

2 に答える 2

2

プレーヤーを停止し、再び再生しないことについてのコメントから。メディア プレーヤーが停止したら、再度 prepare() する必要があります。メディア プレーヤーを停止し、再度準備する必要がない場合は、お勧めします。

public void stopMusic(View view)
{
    if(player != null && player.isPlaying())
    {
        player.pause();
        player.seekTo(0);
    }
}

ここの状態リストを見ると、何が起こっているかがわかります。また、クラス(MediaPlayer)からではなく、インスタンス(プレーヤー)から静的メソッド(create(..))を使用しています

編集:

あなたが尋ねたように。MediaPlayer.create(...) を使用するのが適切な方法です。Eclipse のような IDE を使用している場合、MediaPlayer.create は静的メソッドであるため、作成されたインスタンスではなくクラス (MediaPlayer) から使用する必要があることを警告します。インスタンス経由で実行した場合に問題が発生するかどうかはわかりませんが、すべての警告はエラーであるという哲学に従っているため、念のため標準のコーディング規則を守ろうとしています.

于 2013-09-11T21:44:35.480 に答える
1

私はあまり経験がありませんがMediaPlayer、コメントするには多すぎるため、これが機能するかどうかはわかりません。とにかく、試してみてください

MediaPlayer player;
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);
}

編集

動かしてみる

player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);

出入りonCreate()_playMusic()

 public void playMusic(View view)
{
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);
    player.start();
}

私も電話player.release()したほうがいいと思いますstopMusic()。ここでは問題ないかもしれませんが、安全だと思います。

于 2013-09-11T20:50:02.713 に答える