Android 如何设置从活动到服务的附加项?
因此,我需要将在一个活动中定义的btDevice发送到参数中的服务,以便获取它。以下是服务代码:Android 如何设置从活动到服务的附加项?,android,Android,因此,我需要将在一个活动中定义的btDevice发送到参数中的服务,以便获取它。以下是服务代码: public class Servicio extends JobService implements ServiceConnection { private static BluetoothDevice btDevice; public TemperaturaFragment temperaturaFragment; private MetaWearBoard mwBoard; @Overri
public class Servicio extends JobService implements ServiceConnection {
private static BluetoothDevice btDevice;
public TemperaturaFragment temperaturaFragment;
private MetaWearBoard mwBoard;
@Override
public boolean onStartJob(JobParameters params) {
mJobHandler.sendMessage( Message.obtain( mJobHandler, 1, params ) );
params.getExtras(btDevice = getParcelableExtra(EXTRA_BT_DEVICE));
getApplicationContext().bindService(new Intent(this, BtleService.class), (ServiceConnection) this, BIND_AUTO_CREATE);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
private Handler mJobHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage( Message msg ) {
Toast.makeText( getApplicationContext(),
"JobService task running", Toast.LENGTH_SHORT )
.show();
jobFinished( (JobParameters) msg.obj, false );
return true;
}
} );
下面是我要发送的对象,它在活动中定义:
btDevice= getIntent().getParcelableExtra(EXTRA_BT_DEVICE);
我想使用builder.setExtras(此处的对象)
,然后在服务中使用getExtras(获取对象)
,但是setExtras说它是一个Bluetooth设备,需要一个捆绑包。有什么想法吗?谢谢你的帮助
我把它放在这里,但不起作用,因为数据只是读取,而不是发送
Intent serviceIntent = new Intent(Servicio.class.getName())
serviceIntent.putExtra(1, getIntent().getParcelableExtra(EXTRA_BT_DEVICE));
getApplicationContext().startService(serviceIntent);
因为setExtras()
方法的Intent
将输入值作为Bundle
对象,而BluetoothDevice
对象不是Bundle
类对象
您可以通过Bundle和Intent传递原语数据类型、序列化、Parcelable
和ArrayList
绑定服务
绑定服务是客户端-服务器接口中的服务器。它允许组件(如活动)绑定到服务、发送请求、接收响应和执行进程间通信(IPC)。绑定服务通常只在为另一个应用程序组件提供服务时存在,并且不会无限期地在后台运行
您将了解如何从活动中调用服务类方法
编辑
您可以通过Intent
在Service
中发送数据,如下代码所示:
Intent serviceIntent = new Intent(YourService.class.getName())
serviceIntent.putExtra("UserID", "123456");
context.startService(serviceIntent);
您可以在Service
类的callback
方法中检索Intent
对象,该类名为:
当服务
启动时,将调用其onStartCommand()
方法,因此在该方法中,您可以从意图对象检索值(UserID)
public int onStartCommand (Intent intent, int flags, int startId) {
String userID = intent.getStringExtra("UserID");
return START_STICKY;
}
编辑2
您还可以像下面的代码一样将BluetoothDevice
对象直接发送到Intent,因为它的BluetoothDevice
类实现了Parcelable
接口
Intent serviceIntent = new Intent(YourService.class.getName())
Bundle bundle = new Bundle();
bundle.putParcelable("btDevice",bluetoothDevice);
serviceIntent.putExtras(bundle);
context.startService(serviceIntent);
您可以在服务类中检索它,如下所示:在onStartCommand
方法中
BluetoothDevice btDevice = (BluetoothDevice ) bundle.getParcelable("btDevice");
我怎样才能做到?是否有其他方法将设备传递给服务?或者一种将设备转换为捆绑包的方法?我不知道如何将Parcelabe和ArrayList与设备一起使用,是否有任何来源或解释?为此,您需要创建绑定服务并使用binder对象在服务和活动之间传递任何类型的数据。有示例代码吗?我是新来的,我不能理解它,但我不是在尝试,我只是需要服务执行一次btDevice来读取它拥有的数据,而不是发送数据。您是否尝试传递设备id?使用共享首选项怎么样?我不是要传递de id,而是要传递它获取的数据,现在我看到了serialize方法,知道了吗(