Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何设置从活动到服务的附加项?_Android - Fatal编程技术网

Android 如何设置从活动到服务的附加项?

Android 如何设置从活动到服务的附加项?,android,Android,因此,我需要将在一个活动中定义的btDevice发送到参数中的服务,以便获取它。以下是服务代码: public class Servicio extends JobService implements ServiceConnection { private static BluetoothDevice btDevice; public TemperaturaFragment temperaturaFragment; private MetaWearBoard mwBoard; @Overri

因此,我需要将在一个活动中定义的btDevice发送到参数中的服务,以便获取它。以下是服务代码:

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方法,知道了吗(