В 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, мое решение не идеально, но я не видел хороших ответов на этот вопрос, поэтому, если найдете, пожалуйста, поделитесь им.