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