android - 在 Android 中将字符串数组列表从 Activity 传递到服务

标签 android

我已经制作了一个实现MediaPlayer的功能性Android应用程序,我知道现在已经晚了,但现在总比以前好,我想实现一个能够在多任务处理时播放媒体的服务 在其他应用程序上。

有没有办法将 StringArrayList 从 Activity 传递到 service ?我发现的是有关通过 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 获取音乐 URL 来准备 MediaPlayer

最佳答案

在您绑定(bind)到服务的 Activity 中,您可以添加 ArrayList<String>通过 Intent :

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()您可以从传递的 Intent 中检索它。

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;
}

关于android - 在 Android 中将字符串数组列表从 Activity 传递到服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821181/

相关文章:

android -/usr/lib/x86_64-linux-gnu/libQt5Core.so.5 : version `Qt_5.7' not found (required by emulator64-x86)

java - 每个项目具有不同宽度大小的 RecyclerView

Android Gradle : depends on libraries but is not a library itself

android - 小部件没有响应

java - 如何在 Android/Java 中用 JSON 数组解析 JSONArray?

java - 如何访问 WebChromeClient 中的方法?

android - 如何根据在 ListActivity 中长按的项目设置特定的上下文菜单?

安装新版本后运行的Android信标库

android - Gradle中的任务 ':app:processDebugManifest'执行失败

java - Android db.delete();在列表 Activity 中