管理USB主机注册\取消注册

时间:2014-03-06 20:12:50

标签: android usb device host

我正在处理两个不同的Android应用程序。

Application1:从USB NFC读卡器读取数据 Application2:将数据写入USB NFC读卡器

我可以管理所有读写内容以及USB NFC Reader \ Write的注册\打开。 问题是当我在这两个应用程序之间切换时。

我将请求权限和registerReceiver放在应用程序的onStart()方法中。

protected void onStart() {
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
            Config.ACTION_USB_PERMISSION), 0);
    filter = new IntentFilter();
    filter.addAction(Config.ACTION_USB_PERMISSION);
    registerReceiver(mReceiver, filter);
    for (UsbDevice device : mManager.getDeviceList().values()) {
        if (Config.mReader.isSupported(device)) {
            mManager.requestPermission(device, mPermissionIntent);

        }
    }
    super.onStart();
}

两个应用程序的onStop()方法中的unregisterReceiver:

protected void onStop() {
    if (mReceiver != null) {
        try {
            Config.mReader.close();
            unregisterReceiver(mReceiver);
        } catch (Exception e) {
            Utils.log("error");
        }
    }
    super.onStop();
}

如果我执行此操作:

  1. 单击Home按钮或后退按钮
  2. 关闭Application1
  3. 打开Application2
  4. 一切正常。

    如果我使用show application stack按钮 看起来Application1不能在Application2的onStart()方法之前执行onStop()方法,导致Application1和Application1都控制USB Reader。

    我完全错了吗?

1 个答案:

答案 0 :(得分:0)

为了解决我自己的问题,我这样做了:

  1. 我将注册过程放在onStart()方法
  2. 和onPause()方法中的取消注册过程
  3. 我尝试将注册放在onPause()方法中,但是这样,当提示用户确认权限时,提示窗口显示2次(这是与Activity生命周期相关的正常行为)和注册执行两次。

    按照我的方式,注册和权限过程执行一次,并且在注册其他应用程序之前及时执行取消注册(在onPause()方法中)。

    希望这可以提供帮助。