我正在使用usb POS打印机和我的应用程序。我已经成功编写了连接,请求权限和打印数据的代码。但是,我不确定在打印机断开连接时如何通知用户,如果是,则设备将退回到网络打印机。
所以这是我的BroadcastReceiver请求权限:
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 {
}
}
}
}
};
我在这里搜索了论坛并提出了答案,并且我已经检查了这个http://developer.android.com/guide/topics/connectivity/usb/host.html我找不到一个可靠的方法来做到这一点,而不包括设备过滤器xml文件。我无法做到这一点,因为我不确定最终用户将使用哪种型号的打印机。
我的大脑就是这样炒的,如果有人可以指出如何做到这一点,我会非常感激。
答案 0 :(得分:0)
很晚,但对于未来的读者来说,我是如何做到这一点的。
在onStart()
中,我为ACTION_USB_DEVICE_DETACHED
动作注册广播接收器。
@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()
中,我刚刚完成了与按“后退”基本相同的活动。
private void jobsDone() {
Log.d(TAG, "jobsDone()");
this.finish();
}
因为在我的情况下,一次只能连接一个USB设备,所以我不需要为device_filter.xml
而烦恼。
还记得取消注册接收器。
@Override
protected void onStop() {
Log.d(TAG, "onStop()");
super.onStop();
// Unregister the BroadcastReceiver
unregisterReceiver(detachReceiver);
}