2015-10-18 86 views
2

我正在建立一個音樂播放器,我需要添加一個seekbar的歌曲。我在網上查了一下,但大部分結果都是針對一個媒體播放器,而不是一項服務。我是使用媒體播放器的新手,因此任何詳細的結果都將不勝感激。更新從服務seekbar

+0

你熟悉 「綁定服務」?這是一個很好的例子,當你可以使用「綁定本地服務」模式 – pskink

+0

我一直在閱讀並嘗試一些實現,但我還沒有得到它的工作。 –

+0

你嘗試過「綁定本地服務」模式嗎? – pskink

回答

1

您可以使用廣播接收器將數據從服務發送到活動。

在服務中添加以下方法,並在需要更新時調用此方法SeekBar

public static void publishResult(Context context, int percentage){ 
    Intent intent = new Intent("Broadcast"); 
    intent.putExtra("INTENT_TYPE", "SEEKBAR_RESULT"); 
    intent.putExtra("PERCENTAGE", 10); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
} 

在活動中添加以下代碼接收廣播消息。

@Override 
    public void onResume() { 
     super.onResume(); 
     //Register Broadcast receiver 
     LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mBroadcastReceiver, new IntentFilter("Broadcast")); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     //Unregister Broadcast receiver 
     LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mBroadcastReceiver); 
    } 

    private BroadcastReceiver mBroadcastReceiver= new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String intentType = intent.getStringExtra("INTENT_TYPE"); 
      if(intentType.equalsIgnoreCase("SEEKBAR_RESULT")){ 
       int percentage = intent.getIntExtra("PERCENTAGE"); 
      } 
     } 
    }; 

有關LocalBroadcastManager詳細參見:http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

+0

當活動不在前臺時怎麼辦?當它恢復活動時,seekbar會如何更新到正確的位置? –

+0

@AlexKombo這是一個有效的問題。您可以將結果存儲在Application Global變量中,或者在Shared-preference中和Resume方法中,您可以更新seekbar。對於前臺活動,您可以使用廣播接收器更新Seekbar。 –

+0

我得到它的工作。非常感謝!! –