2015-09-28 60 views
1
以服務

我做了一個實現MediaPlayer功能的Android應用程序,我知道它的晚,但現在好多了總比不,我想實現一個服務,能夠播放媒體時其他應用程序上的multitasking傳遞一個字符串數組列表,從活動的Android

有沒有辦法通過例如ArrayListString從活動到service?我發現大約Custom Objects是通過parcelable我認爲這是沒有必要傳遞的信息。

例如,如何我開始我的轉變:

public class PlayerService extends Service implements MediaPlayer.OnPreparedListener{ 

    private static final String ACTION_PLAY = "action.PLAY"; 
    private static final String ACTION_PAUSE = "action.PAUSE"; 
    private MediaPlayer mediaPlayer = null; 

    @Override 
    public void onCreate() { 
     mediaPlayer = new MediaPlayer(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     if (intent.getAction().equals(ACTION_PLAY)) { 
      try { 
       if(mediaPlayer.isPlaying()) { 
        mediaPlayer.stop(); 
       } 
       mediaPlayer.reset(); 
       mediaPlayer.setDataSource(musicUrl.get(position)); 
       mediaPlayer.setOnPreparedListener(this); 
       mediaPlayer.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

//   setCurrentSong(myDataList.get(position)); 
//   morphButton.setState(MorphButton.MorphState.START); 
// 
//   setHighlight(myDataList.get(currentPosition)); 
     } 

     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 

    } 
} 

正如你所看到的,我需要從ArrayList音樂網址去德MediaPlayer

+1

您可以用'intent.putStringArrayListExtra()'通'的ArrayList()''的String' –

+0

您也可以使用intent.putSerializableExtra()來傳遞的ArrayList或者任何自定義類實現Serializable – Nanoc

回答

1

在您的活動,準備在那裏綁定到服務,您可以通過意向添加ArrayList<String>

ServiceConnection serviceConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName componentName) { 
    } 
}; 

ArrayList<String> stringList = new ArrayList<>(); 
stringList.add("a"); 
stringList.add("b"); 

Intent i = new Intent(this, BLEDiscoveryService.class); 
i.putStringArrayListExtra("list", stringList); 

bindService(new Intent(this, MyService.class), serviceConnection, BIND_AUTO_CREATE); 

而且在服務的onBind()你可以從傳遞的意圖中檢索它。

public class LocalBinder extends Binder { 
    public MyService getService() { 
     return MyService.this; 
    } 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    binder = new LocalBinder(); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    ArrayList<String> stringList = intent.getStringArrayListExtra("list"); 
    return binder; 
} 
相關問題