2015-02-07 39 views
1

對於MediaPlayer我提到了http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/點擊後退按鈕和MediaPlayer崩潰Android

我已經創建了媒體播放器的活動,它具有所有功能,如播放,暫停,下一個,上一個,搜索欄,還包括OnCompletionListener。所有作品都很棒。但是現在我希望所有這些都應該由服務來管理。

我已經創建的MyService類:

public class MusicPlayerService extends Service { 

    MediaPlayer mp; 
    String fullStreamUrl; 

    @Override 
    public IBinder onBind(Intent arg0) { 

     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mp = new MediaPlayer(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     if (intent != null) { 
      fullStreamUrl = intent.getStringExtra("fullStreamUrl"); 
      // Log.d("url", "Geturl:- " + fullStreamUrl); 
     } 

     try { 
      mp.reset(); 
      mp.setDataSource(fullStreamUrl); 
      mp.prepareAsync(); 
      mp.start(); 
      mp.setLooping(true); 
     } 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(); 
     } 
     return 0; 
    } 

    @Override 
    public void onDestroy() { 
     mp.release(); 
     super.onDestroy(); 
    } 
} 

如何使用服務和管理currentsongIndex所有功能。 謝謝。請清除我的疑問。我感到很困惑。

+0

顯示崩潰日誌.. – 2015-02-07 05:30:37

+0

後退按鈕崩潰問題解決但next,previous和seekbar不起作用。 – 2015-02-07 05:38:03

+0

我已經使用了我上面提到的網站的媒體播放器代碼。在這段代碼中,我創建了服務並嘗試處理所有下一個,以前的功能。 – 2015-02-07 05:38:40

回答

2

從使用服務在後臺運行的Activity管理MediaPlayer。您應該創建一些命令,在,previousseekbar動作發生在Activity中時將播放。

如果服務在同一進程中運行,則使用LocalBroadcastManager,否則BroadcastReceiver用於從活動獲取事件。

例如:在onCreate

public static String STR_NEXT="MusicPlayerService.NEXT"; 
    public static String STR_PREV="MusicPlayerService.PREV"; 

2.註冊接收的所有操作:

創建下一個,上,...操作在服務操作

@Override 
public void onCreate() { 
    super.onCreate(); 
    mp = new MediaPlayer(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(STR_NEXT); 
    filter.addAction(STR_PREV); 
    LocalBroadcastManager.getInstance(this). 
      registerReceiver(mediaAction,filter); 
} 

private BroadcastReceiver mediaAction = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      if(intent.getAction().equals(STR_NEXT)){ 
       forwardClick(); 
      } 
      // do same for other actions 
     } 
}; 

3.創建下一個操作的服務方法:

public void forwardClick(){ 
    int currentPosition = mp.getCurrentPosition(); 
    if(currentPosition + seekForwardTime <= mp.getDuration()){ 
    mp.seekTo(currentPosition + seekForwardTime); 
    }else{ 
    mp.seekTo(mp.getDuration()); 
    } 
} 

以相同方式創建其他方法。

4.從按鍵上的活動點擊與所需的行動發送廣播:

btnForward.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Intent intent = new Intent(MusicPlayerService.STR_NEXT); 
     LocalBroadcastManager.getInstance(
         view.getContext()).sendBroadcast(intent); 
    } 
}); 

在發送同樣的方式播出的其他行動。

+0

感謝它的工作,但我如何管理暫停,下一步,seekBar,我的意思是我在服務中編寫的下一個按鈕代碼,然後我如何更改圖像。並顯示seekbarprogress ... – 2015-02-07 10:55:14

+1

@Priyank:就像你發送活動到服務的事件一樣。對發送改變圖像的事件做同樣的事情,從服務到活動的seekbar進度 – 2015-02-07 11:00:52

0

上的onDestroy()嘗試

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    mp.stop(); 
} 
+0

後退按鈕我的媒體播放器正在工作,而歌曲正在播放,但如何管理下一個,前一個,前進和seekBarProgress。 – 2015-02-07 05:54:00

+0

嘗試BroadcastReceiver。它可能會幫助你 – Nivedh 2015-02-07 06:13:07

0

嘗試通過您的logcat的消息會或他們在這裏粘貼爲我們能夠跟蹤誤差。