そこで、モバイル プログラミング クラス用のアプリケーションを作成していますが、その「再生」部分で問題が発生しています。いくつかのコンテキストを提供するために: 基本的に、事前定義されたソースから mp3 をダウンロードし、その mp3 を再生する基本的なオーディオ プレーヤーを作成する必要があります。ダウンロード サービスを正しくセットアップしましたが、ファイルを再生するためのコードが機能しない理由がわかりません。私のmain.javaには、たくさんのアノンがあります。UI のボタンの onclick リスナーと、どのボタンがクリックされたかを把握するためのメディア プレーヤー サービスの switch ステートメント。
主なアクティビティからの再生オプションの onclick は次のとおりです。
play.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), PlayService.class);
File path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File file = new File(path, "Bob_Marley-Jammin.mp3");
intent.putExtra("path", file);
intent.putExtra("key", 0);
startService(intent);
}
});
そして、ここにonclickのダウンロードがあります:
download.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), DownloadService.class);
intent.putExtra("url", "https://dl.dropbox.com/s/6e6pn43916nl10i/Bob_Marley-Jammin.mp3?dl=1");
startService(intent);
}
});
ここに私のPlayServiceがあります:
package com.connor.black;
import java.io.IOException;
import android.app.IntentService;
import android.content.Intent;
import android.media.MediaPlayer;
public class PlayService extends IntentService{
public PlayService() {
super("PlayService");
}
public MediaPlayer mMediaPlayer;
public String path;
@Override
protected void onHandleIntent(Intent intent) {
path = intent.getStringExtra(path);
int key = intent.getIntExtra("key", 0);
mMediaPlayer = new MediaPlayer();
switch (key) {
case 0: //Play
if (mMediaPlayer.isPlaying())
break;
else{
try {
mMediaPlayer.setDataSource(path);
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
mMediaPlayer.prepare();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
mMediaPlayer.start();
}
break;
case 1: //Pause
if(mMediaPlayer.isPlaying())
mMediaPlayer.pause();
break;
case 2: //Stop
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
mMediaPlayer.seekTo(0);
}
break;
default:
break;
}
}
}
基本的にファイルは正しくダウンロードされますが、「再生」ボタンを押しても何も起こりません。