简体   繁体   English

将字符串数组列表从活动传递到 Android 中的服务

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

I've made a functional android application that implements MediaPlayer and I know it's late now but better now than never, I want to implement a service to be able to play media while multitasking on other applications.我已经制作了一个实现MediaPlayer的功能性 android 应用程序,我知道现在已经晚了,但总比没有好,我想实现一个服务,以便能够在其他应用程序上进行multitasking时播放媒体。

Is there a way how can I pass for example an ArrayList of String from activity to the service ?有没有办法如何将例如StringArrayList从活动传递到service What I have found were information about Custom Objects that are passed through parcelable which I think is not needed.我发现的是有关通过parcelable传递的Custom Objects信息,我认为这不是必需的。

For example, how I've started my transition:例如,我是如何开始过渡的:

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) {

    }
}

As you can see, I need to get from an ArrayList the music URL to prepare de MediaPlayer如您所见,我需要从ArrayList获取音乐 URL 以准备 de MediaPlayer

In your activity, where you bind to the service you can add an ArrayList<String> via the intent:在您绑定到服务的活动中,您可以通过意图添加一个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);

And in your service's onBind() you can retrieve it from the passed intent.在您的服务的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