Java 如何使用putExtra将类实例传递给服务
我有一个类,它使用import io.flatter.plugin.common.MethodChannel的类实例,但现在我想将该类实例传递给一个可以调用它的服务,但我无法绕过它 我尝试过使用putExtra,但我似乎找不到从服务端获得它的方法 例如:Java 如何使用putExtra将类实例传递给服务,java,android,flutter,Java,Android,Flutter,我有一个类,它使用import io.flatter.plugin.common.MethodChannel的类实例,但现在我想将该类实例传递给一个可以调用它的服务,但我无法绕过它 我尝试过使用putExtra,但我似乎找不到从服务端获得它的方法 例如: Intent playIntent = new Intent(activity.getApplicationContext(), MusicPlayerService.class); playIntent.putExtra("activeAud
Intent playIntent = new Intent(activity.getApplicationContext(), MusicPlayerService.class);
playIntent.putExtra("activeAudioUrl", activeAudio);
playIntent.putExtra("channelInstance", channel);
activity.startService(playIntent);
下面是我试图从中获取数据的服务类:
public int onStartCommand(Intent intent, int flags, int startId) {
String activeAudio = intent.getStringExtra("activeAudioUrl");
MethodChannel methodChannel = intent.getParcelableExtra("channelInstance");
...
}
不能通过调用startService()将非数据对象传递到IPC边界上。实际上,您在这里所做的是调用ActivityManager,这是一个在不同进程中运行的系统服务,用于在您的进程中为您启动服务。相反,您可以将MethodChannel引用放在可以从服务和启动它的位置访问的位置,例如,通过使用依赖项注入。您应该创建一个包含要传递的数据的类,并从
可序列化的
或可打包的
扩展/实现该类,然后您可以将该类的对象作为额外的
放入您的意图
中,并在服务
中使用它。
在这个类中,您创建数据,传递它们,然后检索它们。
要创建自定义包裹类,您可以看到以下链接:
根据我的观点,最好用包裹
因此,创建一个实现Parcelable的类(例如,命名这个类DataToSend
),您可以使用构造函数传递数据,并使用getter检索数据
编辑=>现在DataToSend
已经实现了Parcelable
,您需要做的就是:
Bundle bundle = new Bundle();
DataToSend dataToSend = new DataToSend(activeAudio, channel);
bundle.putParcelable("data", dataToSend);
Intent playIntent = new Intent(activity.getApplicationContext(),
MusicPlayerService.class);
playIntent.putExtra(bundle);
activity.startService(playIntent);
以及检索数据:
public int onStartCommand(Intent intent, int flags, int startId) {
String activeAudio = intent.getStringExtra("activeAudioUrl");
MethodChannel methodChannel = intent.getParcelableExtra("channelInstance");
Bundle b = intent.getExtra();
DataToSend data = (DataToSend) b.getParcelable("data");
// Here you can retrieve your data(channel & activeAudio) from following
// data object. (e.g. data.getAudio())
...
}
基本上,如果您想要以一种意图传递一个类,该类需要实现
Parcelable
接口。但是,我怀疑您是否有意传递MethodChannel
的实例。您将泄漏与通道关联的数据。为什么要这样做?MethodChannel
是否实现了Parcelable
?另一方面,您可以绑定服务并使用Binder
设置实例。没有MethodChannel不实现Parcelable
如何绑定服务,请显示代码示例。我是java新手,我正在尝试为需要使用android的框架创建一个插件。也许这个方法可以解决您的问题。