我有一个使用import io.flutter.plugin.common.MethodChannel
的类实例的类,但是现在我想将该类实例传递给可以调用它的服务,但是我无法解决它。
我尝试使用putExtra,但似乎找不到从服务端获取它的方法。
例如:
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");
...
}
答案 0 :(得分:0)
您不能通过调用startService()在IPC边界上传递非数据对象。您实际上在这里执行的是调用ActivityManager,它是在不同进程中运行的系统服务,可以为您在进程中启动服务。相反,您可以做的是将MethodChannel引用放在服务和启动它都可以到达的位置,例如通过使用依赖项注入。
答案 1 :(得分:0)
您应该创建一个包含要传递的数据的类,并从Serializable
或Parcelable
扩展/实现该数据,然后可以将该类的对象作为Extra
放入您的Intent
,并在您的Service
中使用它。
在此类中,您将创建数据,将其传递,然后将其检索。
要创建自定义的Parcelable类,您可以查看以下链接:
根据this link,最好使用Parcelable。
因此,创建一个实现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())
...
}
答案 2 :(得分:-2)