バックグラウンドサービスで実行されているメディアプレーヤーがあります。MP3ファイルは、デスクトップ上のサーバーからTCPに設定されます。アプリをデバッグするとき、曲は送受信されます。曲のセレクションは、3つのアクティビティで構成されています。アルバムリスト(リストビュー)アクティビティでは、曲リスト(リストビュー)アクティビティに移動します。チェックボックスを選択し、選択時に再生ボタンをクリックして曲を選択します。再生ボタンはサービスにバインドされ、曲はtcpを介して要求されます。すべての曲は電話のストレージに追加されます。これは、tcpを介して設定されたbyte []を受け取るメソッドです(これはmyMediaPlayerクラス内の形式です:
public void AddSong(byte[] toParse, String songName)
{
File cacheDir = new File(android.os.Environment.getExternalStorageDirectory(),"MusicStreamCache");
if(!cacheDir.exists())
cacheDir.mkdirs();
File temp = new File(cacheDir, songName);
FileOutputStream fos;
try {
fos = new FileOutputStream(temp);
fos.write(toParse);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
songs.add(temp);
if(!mediaPlayer.isPlaying() && !isPaused)
{
MediaPlay();
}
}
public void AddSong(File filein)
{
filein.deleteOnExit();
songs.add(filein);
if(!mediaPlayer.isPlaying() && !isPaused && CurrentSong == 0)
{
MediaPlay();
}
}
public void MediaPlay()
{
if(!mediaPlayer.isPlaying() && CurrentSong <= songs.size())
{
mediaPlayer.reset();
try{
@SuppressWarnings("resource")
FileInputStream fis = new FileInputStream(songs.get(CurrentSong));
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
int length = mediaPlayer.getDuration();
mediaPlayer.start();
if(CurrentSong <= songs.size())
{
CurrentSong ++;
}
}
catch(Exception err)
{
@SuppressWarnings("unused")
String error = err.getMessage();
}
mediaPlayer.setOnCompletionListener(completionListener);
}
}
OnCompletionListener completionListener = new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
if(CurrentSong <= songs.size())
{
MediaPlay();
}
}
};
電話がデスクトップに接続されていて、アプリをデバッグしているときは、すべてが期待どおりに機能します。アルバムから1曲追加すると、ダウンロードして再生されます。アルバムからいくつかの曲(またはすべての曲)を追加すると、ダウンロードして次々に再生されます。いくつかの異なるアルバムから曲を選択できます。それらはすべて次々にダウンロードされ、順番に再生されます。つまり、完了時のリスナーは期待どおりに機能します。
この問題は、Eclipseから(デバッグなしで)アプリを実行してからデスクトップからデタッチする(WiFi信号が弱いか、家中のさまざまな場所でテストするため)と選択した場合に発生します。曲を選択すると、ダウンロードして正常に再生されます。ただし、複数の曲を選択すると、最初の曲は正常に再生されますが、それ以降の曲は再生されません。ダウンロードした曲のリストで最初の曲の再生が停止し、新しく選択した曲がダウンロードされて再生されないときに、新しい曲を選択したかのようにダウンロードしています。なぜこれが発生するのか理解できないのですか?
デバッグ中はこれらの問題は発生していません。デスクトップに接続されていないときにサービスの焦点が失われるのではないかと思いますか?それとも私は何か明らかなものを見逃していますか?メディアプレーヤーに部分的なウェイクロックを追加しましたが、彼は問題を軽減していないようです?? ヒントをいただければ幸いです:-)