2011-08-08 2 views
2

То же, что и название. Я хочу использовать sendBroadcast(intent) для начала трансляции; , а затем в broadcast.java использовать onReceive(), например так:Может ли андроид использовать BroadcastReceiver для воспроизведения музыки без Сервиса?

public void onReceive(Context context, Intent intent) 
{  
     Toast.makeText(context, "successful", Toast.LENGTH_LONG).show(); 
     MediaPlayer.create(context, R.raw.canon).start();  
    } 

Но ВМ не может это сделать, и он говорит: the media unable to create.... Я новичок, я не знаю, как бороться с ним. Пожалуйста, помогите мне, спасибо :-)

ответ

3

Нет, вы не должны запускать что-либо асинхронное или долгое время в onReceive. Если вам нужно запустить что-то в фоновом режиме, используйте Service.

Это потому, что как только onReceive возвращается, компонент считается мертвым. Поэтому никакие фоновые операции не могут быть привязаны к этому компоненту. И даже больше, Android может убить процесс, как только onReceive вернется, если это был единственный компонент в процессе.

+0

Спасибо, o (∩_∩) o ... ваш ответ позвольте мне понять причину ясно. Спасибо снова! – qzeroy

0

Да, это возможно.

Однако это плохая практика, так как воспроизведение мультимедиа может быть сложной задачей.

Если вы пытаетесь извлечь и воспроизводить носители в основном потоке приложения, вы, скорее всего, получите страшный «bluescreen» Android, приложение Not Responseing, firce close error.

EDIT:

Важное примечание:

Как правило, вы хотите использовать ContentProvider, а не пытаться получить доступ большие файлы, как музыка непосредственно.

+0

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

+0

Нет проблем. Пожалуйста, отметьте ответ как «правильный» и/или увеличьте его, если он ответит на ваш вопрос. Надеюсь, вам понравится! – Codeman

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