2011-12-17 178 views
3

我實現了一個mediaplayer和mediacontroller,流的MP3網址。然而,我在TMobile網絡上的設備不能獲得很好的3G信號,因此它在EDGE上運行。我假設mediaplayer崩潰,因爲流太慢或不完整,有沒有超時我可以設置?android媒體播放器媒體控制器超時

回答

0

的確Mediaplayer確實需要一些時間來緩衝和緩慢的網絡,可能會導致問題。

你不能控制這個過程,沒有用戶設置超時,但你可以通過捕獲所有異常,如setDataSource(),prepare(),prepareAsync()和start()可以拋出。

1

您還可以在MediaPlayer上使用prepare()而不是prepareAsync(),並將其放入asyncTask或工作線程中;那麼你可以自己實現超時功能。稍後我會添加一個代碼示例,但我認爲這個想法很明確。

3

沒有超時方法在MediaPlayer,但你可以自己實現 - 有很多方法可以做到這一點。 我建議他們中的一個,我用我自己和它的工作對我來說 - 廣播接收器 代碼看起來像:

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,我的解決方案並不完美,但我還沒有看到這個問題的任何好的答案,如果找到了,請分享。

+0

這個答案很好,但是我正在尋找與媒體播放器api本身有關的東西...... – 2015-03-21 01:34:18