URLから曲をダウンロードし、メディアプレーヤーを使用してサービスで再生する小さなアプリをプログラミングしています。作業に必要なものはすべて揃っています。ただし、曲の再生を開始すると、停止ボタンと一時停止ボタンが機能せず、もう一度再生を押すと、曲の2番目のコピーの再生が開始されます。何が悪いのかはわかっていると確信しています。修正方法がわかりません。
public class Player extends IntentService {
public Player() {
super("Player");
}
MediaPlayer mp;
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
Uri uri = intent.getData();
mp = MediaPlayer.create(this, uri);
if(extras != null)
{
if(extras.getString("action").equals("play"))
{
mp.start();
}
else if(extras.getString("action").equals("pause"))
{
mp.pause();
}
else if(extras.getString("action").equals("stop"))
{
if (mp != null) {
mp.stop();
mp.release();
}
}
}
}
}
私のボタンの1つのコードの例:
play.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
intent.putExtra("action", "play");
startService(intent);
}});
ボタンを押してインテントを送信するたびに、メディアプレーヤーの別のインスタンスが作成されるため、そのコピーは再生されないため、一時停止または再生されず、再生を押すと別のコピーが生成されると思います。初めてプレイを押したときにのみプレーヤーが作成されるように設定しようとしましたが、うまくいきませんでした。また、「作成」のような別のアクションを作成して、メインアクティビティが最初にファイルをダウンロードしたときに送信しようとしましたが、それも機能しませんでした。両方ともクラッシュしました。おそらく私はそれらを間違ってしました。コードまたはLogCatのコピーがないことをお詫び申し上げます。プレーヤーを一度だけ作成する方法について誰か提案がありますか?または、ファイルのURIをonCreateに渡しますか?
編集:これを投稿してから、再生ボタンの応答を変更してみました。今です:
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
if(extras != null)
{
if(extras.getString("action").equals("play"))
{
if (mp != null) {
mp.start();
}
else {
Uri uri = intent.getData();
mp = MediaPlayer.create(this, uri);
mp.start();
}
}
Log呼び出しを使用して、クラッシュしている場所を特定しました。LogCatで.create呼び出しに失敗し、次のように表示されます。
09-22 22:58:24.566:E / AndroidRuntime(1446):致命的な例外:IntentService [Player] 09-22 22:58:24.566:E / AndroidRuntime(1446):java.lang.NullPointerException 09-22 22:58 :24.566:E / AndroidRuntime(1446):android.media.MediaPlayer.setDataSource(MediaPlayer.java:868)09-22 22:58:24.566:E / AndroidRuntime(1446):android.media.MediaPlayer.setDataSource( MediaPlayer.java:854)09-22 22:58:24.566:E / AndroidRuntime(1446):android.media.MediaPlayer.create(MediaPlayer.java:788)09-22 22:58:24.566:E / AndroidRuntime( 1446):android.media.MediaPlayer.create(MediaPlayer.java:769)09-22 22:58:24.566:E / AndroidRuntime(1446):com.example.mp3player.Player.onHandleIntent(Player.java:36) )09-22 22:58:24.566:E / AndroidRuntime(1446):android.app.IntentService $ ServiceHandler.handleMessage(IntentService.java:65)09-22 22:58:24.566:E / AndroidRuntime(1446):android.os.Handler.dispatchMessage(Handler.java:99)09-22 22:58:24.566:E / AndroidRuntime(1446):android.os.Looper.loop(Looper.java) :137)09-22 22:58:24.566:E / AndroidRuntime(1446):android.os.HandlerThread.run(HandlerThread.java:60)
どんな助けでも大歓迎です!