仅在Android服务中创建媒体播放器

时间:2016-01-26 00:01:20

标签: android android-service android-mediaplayer

我正在尝试制作一个在后台播放单首歌曲的服务。用户输入歌曲的标题,它搜索它并在没有UI的情况下播放它。我有搜索部分,但我从来没有在服务中使用Android媒体播放器,我得到一些错误。

以下是我目前搜索的示例代码:

ArrayList<String> matches = new ArrayList<String>();
AudioManager mgr =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
Intent sending = new Intent("com.android.music.musicservicecommand");
String command = intent.getStringExtra("command");
Log.v("MusicService",command);
sending.putExtra("command", command);
MusicService.this.sendBroadcast(sending);
Cursor cursor = getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    null,
    MediaStore.Audio.Media.TITLE + " LIKE ?",
    new String[]{"%"+command+"%"},
    MediaStore.Audio.Media.TITLE + " ASC");
while (cursor.moveToNext()) {
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
    matches.add(path);
    Log.v("MusicService",path);

这是我运行媒体播放器的代码:

MediaPlayer mplayer = new MediaPlayer();
mplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
String filePath = matches.get(0);
File file = new File(filePath);
try {
    FileInputStream inputStream = new FileInputStream(file);
    mplayer.setDataSource(inputStream.getFD());
    inputStream.close();
    mplayer.prepare();
    mplayer.start();
} catch(Exception e){
    e.printStackTrace();
}

我目前得到的错误是死线程错误的处理程序但我不确定如何在媒体播放器完成之前保持线程活着。

1 个答案:

答案 0 :(得分:0)

问题来自于我使用了intentservice而不是service。我不知道intentservice在处理完所有步骤后就会结束。我将其更改为服务,现在它按预期运行。