检测USB设备何时与Android设备分离

检测USB设备何时与Android设备分离,android,usb,Android,Usb,我在应用程序中使用usb POS打印机。我已经成功地编写了连接、请求权限和打印数据的代码。但是,我不确定当打印机断开连接时如何通知用户,如果断开连接,则设备将返回网络打印机 这是我请求许可的广播接收器: private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String

我在应用程序中使用usb POS打印机。我已经成功地编写了连接、请求权限和打印数据的代码。但是,我不确定当打印机断开连接时如何通知用户,如果断开连接,则设备将返回网络打印机

这是我请求许可的广播接收器:

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if(device != null){
                        mDevice = device;

                        if(mConnection == null){
                            Log.i(m_Tag, "Connection is null");
                        }
                        Log.i(m_Tag, "Connected successfully");
                    }else{
                        Log.i(m_Tag, "Device is null");
                    }
                }
                else {
                }
            }
        }
    }
};
我浏览了这里的论坛并给出了建议答案,我已经检查了这个问题,如果不包含设备过滤器xml文件,我找不到一个可靠的方法来实现它。我不能这样做,因为我不确定最终用户将使用哪种型号的打印机


如果有人能告诉我怎么做,我将不胜感激。

很晚了,但对未来的读者来说,这里是我怎么做的

onStart()
中,我为
操作\u USB\u设备\u分离的
操作注册了一个广播接收器

@Override
protected void onStart() {
        Log.d(TAG, "onStart()");
        super.onStart();

        // Catch a USB detach broadcast intent.
        detachReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
                    jobsDone();
                }
            }
        };

        // Set the intent filter for the broadcast receiver, and register.
        IntentFilter filter = new IntentFilter();
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        registerReceiver(detachReceiver, filter);
}
在我的
jobsDone()
中,我只完成了与按“后退”基本相同的活动

因为在我的情况下,一次只能连接一个USB设备,所以我不必为分离而麻烦使用
device\u filter.xml

还记得注销接收者

@Override
protected void onStop() {
    Log.d(TAG, "onStop()");
    super.onStop();
    // Unregister the BroadcastReceiver
    unregisterReceiver(detachReceiver);
} 

我尝试将广播接收器用于设备分离,不幸的是,只有当我将设备连接回时,它才会触发。
@Override
protected void onStop() {
    Log.d(TAG, "onStop()");
    super.onStop();
    // Unregister the BroadcastReceiver
    unregisterReceiver(detachReceiver);
}