![](/img/trans.png)
[英]how to pass an ArrayList<String> from an Activity to a service in android?
[英]Pass an arraylist of strings from activity to service in Android
我已經制作了一個實現MediaPlayer
的功能性 android 應用程序,我知道現在已經晚了,但總比沒有好,我想實現一個服務,以便能夠在其他應用程序上進行multitasking
時播放媒體。
有沒有辦法如何將例如String
的ArrayList
從活動傳遞到service
? 我發現的是有關通過parcelable
傳遞的Custom Objects
信息,我認為這不是必需的。
例如,我是如何開始過渡的:
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
獲取音樂 URL 以准備 de MediaPlayer
在您綁定到服務的活動中,您可以通過意圖添加一個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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.