我怎样才能在服务中获得Intent?

时间:2017-04-07 07:46:11

标签: android

我有这个意图:

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)

它表示意图为空,但它在活动上不为空。

1 个答案:

答案 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;
}