我有这个意图:
Intent serviceIntent = new Intent(getApplicationContext(), Servicio.class);
serviceIntent.putExtra(MainActivity.EXTRA_BT_DEVICE, btDevice);
getApplicationContext().startService(serviceIntent);
但出于某种原因,在使用此代码的服务中:
btDevice = (BluetoothDevice) params.getExtras().get(MainActivity.EXTRA_BT_DEVICE);
// btDevice = getParcelableExtra(EXTRA_BT_DEVICE)
它表示意图为空,但它在活动上不为空。
答案 0 :(得分:3)
您需要将服务绑定到访问服务方法的活动。使用服务对象,您可以调用服务方法并将值从活动传递到服务。 将此代码写入活动 -
Servicio mService;
@Override
protected void onResume() {
super.onResume();
Intent bindIntent = new Intent(this, Servicio.class);
bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onPause() {
super.onPause();
unbindService(mServiceConnection);
mService = null;
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder rawBinder) {
mService = ((Servicio.LocalBinder) rawBinder).getService();
}
public void onServiceDisconnected(ComponentName classname) {
//// mService.disconnect(mDevice);
mService = null;
}
};
mService是服务类的对象,使用它可以将值传递给服务。
在服务类中写下
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder {
public Servicio getService() {
return Servicio.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}