簡體   English   中英

將字符串數組列表從活動傳遞到 Android 中的服務

[英]Pass an arraylist of strings from activity to service in Android

我已經制作了一個實現MediaPlayer的功能性 android 應用程序,我知道現在已經晚了,但總比沒有好,我想實現一個服務,以便能夠在其他應用程序上進行multitasking時播放媒體。

有沒有辦法如何將例如StringArrayList從活動傳遞到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM