Мой первый пост здесь.Этот сайт был очень полезен для изучения программирования на Android, спасибо всем.
У меня есть простое приложение, которое загружает поток MP3 и воспроизводит его.Он отлично работает на 1.6 и 2.1, но на 2.2 он работает не совсем правильно.Кажется, у моего сервиса проблема с запуском, он дает мне ANR и диалоговое окно, где я должен нажать «Ждать», и, наконец, сервис запускается.Почему запуск сервиса занимает много времени?
Вот мой простой код, который устанавливает источник и воспроизводит звук:
public class MyActivityService extends Service {
MediaPlayer player = new MediaPlayer();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
try {
player.setDataSource("URL OF MUSIC FILE");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
player.prepare();
player.setVolume(1, 1);
player.setLooping(true);
player.start();
Toast.makeText(getApplicationContext(), "Audio Service Started.", Toast.LENGTH_SHORT).show();}
ADDENDUM:
Оказывается, это не был мой сервис, который не запускался, это аудио, которое не запускается достаточно быстро в 2.2 ...
Я избавился от ANR, когда мой сервис запускался и останавливался, поставив onCreate()
и onDestroy()
методы моего сервиса в собственных потоках, что, вероятно, так и должно было быть с самого начала?Извините, только учусь.
Но задержка, которая является настоящей проблемой, остается уточнить -
Например, мой код, как он есть сейчас, работает отлично, и как яхотите, чтобы это было в 2.1 И 2.2, когда я устанавливаю источник данных в MP3-файл, например, так: http://dl.dropbox.com/u/6916184/TestSongStream.mp3
НО, когда я устанавливаю источник данных в местоположение аудиопотока, например: http://d.liveatc.net/kjfk_twr или это: http://relay.radioreference.com:80/192236577 работает правильно ТОЛЬКО в 2.1.
В 2.2 звук в конце концов начинает воспроизводиться, но «StagefrightPlayer» занимает около 25 секунд или около того после настройки источника данных, пока звук не запустится, как показано здесь:
07-31 02:54:30.176: INFO/StagefrightPlayer(34): setDataSource('http://relay.radioreference.com:80/192236577')
07-31 02:54:55.228: INFO/AwesomePlayer(34): calling prefetcher->prepare()
07-31 02:54:56.231: INFO/Prefetcher(34): [0x2cc28] cache below low water mark, filling cache.
07-31 02:54:56.337: INFO/AwesomePlayer(34): prefetcher is done preparing
07-31 02:54:56.347: DEBUG/AudioSink(34): bufferCount (4) is too small and increased to 12
07-31 02:54:57.337: ERROR/AwesomePlayer(34): Not sending buffering status because duration is unknown.
Это такжеОстановка медиапроигрывателя занимает примерно 25 секунд после вызова player.stop()
в методе onDestroy()
моего сервиса, а метод onDestroy()
продолжает выводить сообщение и отменять уведомление.
Это так же, как с 2.2?Если так, я могу обойти задержки, это не проблема.Или, скорее, я что-то не так делаю?Но это работает именно так, как я хочу в 1.6 и 2.1!
Поможет ли публикация большего количества кода?
Мой код очень прост.Там нет управления звуком или что-то в этом роде.Просто нажмите кнопку запуска аудио и кнопку остановки аудио, чтобы запустить и остановить службу, которая воспроизводит аудиопоток.
Спасибо за любую помощь!