тайм-аут мультимедийного проигрывателя Android - PullRequest
3 голосов
/ 17 декабря 2011

Я реализовал медиаплеер и медиаконтроллер, который транслирует mp3-ссылку. Однако мое устройство в сети TMobile не получает отличный сигнал 3G, поэтому оно работает на EDGE. Я предполагаю, что медиаплеер падает, потому что поток слишком медленный или неполный, есть ли время ожидания, которое я могу установить?

Ответы [ 3 ]

3 голосов
/ 18 марта 2015

В MediaPlayer нет метода timeout , но вы можете реализовать его самостоятельно - есть множество способов сделать это. Я предлагаю один из них, который я использовал сам, и он работал для меня - BroadcastReceiver Код будет выглядеть так:

public class ConnectivityCheckingReceiver extends WakefulBroadcastReceiver
{
  private AlarmManager alarmManager;
  private PendingIntent pendingIntent;

  @Override
  public void onReceive(Context context, Intent intent)
  {
    if (MusicService.mediaPlayer != null)
    {
        if (!MusicService.mediaPlayer.isPlaying())
            Log.v("Music", "Music is NOT playing"); 
            //stop service and notify user
        else
            Log.v("Music", "Music is playing");
    }
    else
    {
        Log.v("Music", "User stopped player");
    }
  }
  public void setAlarm (Context context, int hour, int minute, int second)
  {
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, ConnectivityCheckingReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, second);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);      
  }
}

В вашей деятельности / услуге / фрагменте вы добавляете эту строку:

ConnectivityCheckingReceiver conCheck = new ConnectivityCheckingReceiver();
conCheck.setAlarm(context, hour, min, second);

Вам потребуется самостоятельно реализовать логику проверки часов / минут / секунд, но это легко сделать с помощью таких библиотек, как Joda Time . И не забудьте добавить в свой манифест:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<receiver android:name=".receivers.ConnectivityCheckingReceiver" />

Ps, мое решение не идеально, но я не видел хороших ответов на этот вопрос, поэтому, если найдете, пожалуйста, поделитесь им.

1 голос
/ 27 декабря 2012

Вы также можете использовать prepare () вместо prepareAsync () в MediaPlayer и поместить его в asyncTask или рабочий поток; тогда вы можете самостоятельно реализовать функцию тайм-аута. Я добавлю пример кода позже, но идея ясна, я думаю.

0 голосов
/ 30 января 2012

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

Вы не можете управлять этим процессом, пользователь не устанавливает таймаут, но вы можете убедиться, что он не приведет к сбою вашего приложения, перехватывая все исключения, такие как setDataSource (), prepare (), prepareAsync () и start () может бросить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...