2016-01-26 7 views
0

Я пытаюсь сделать сервис, который воспроизводит одну песню в фоновом режиме. Пользователь вводит название песни, он ищет ее и воспроизводит ее без пользовательского интерфейса. У меня есть часть поиска, но я никогда не использовал медиа-плеер Android в службе и получаю несколько ошибок.Создание медиаплеера только в службе 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(); 
} 

Ошибка настоящее время я получаю является обработчик ошибки мертвого потока, но я не уверен, как сохранить поток до тех пор, пока медиаплеер не будет завершен.

+0

Вы должны добавить сообщение об исключении из своего сообщения. Кроме того, если у вас проблемы с потоками, вы должны сообщить нам, как вы управляете потоками (то есть: какой поток запускает какой код и когда). В противном случае мы не сможем. –

+0

Я думаю, что я действительно понял это. Я не упоминал, что я использовал услугу intentservice вместо службы, поэтому поток умирал, как только он выполнил все свои задачи –

ответ

0

Проблема возникла из-за того, что я использовал услугу intentservice вместо службы. Я не знал, что intenservice закончил, как только он обработал все свои шаги. Я изменил его на службу, и теперь он функционирует так, как ожидалось.

Смежные вопросы