Need to add following permissions in AndroidManifest.xml file.
[code lang=”xml”]
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
[/code]
Need to make device_filter.xml file in resource(/xml/device_filter.xml).
[code lang=”java”]
private final UsbManager mUsbManager;
protected static final String ACTION_USB_PERMISSION = "com.xyz.android.USB";
mUsbManager = (UsbManager) mApplicationContext.getSystemService(Context.USB_SERVICE);
enumerate(mPermissionListener);
private final IPermissionListener mPermissionListener = new IPermissionListener() {
@Override
public void onPermissionDenied(UsbDevice d) {
UsbManager usbman = (UsbManager) mApplicationContext.getSystemService(Context.USB_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
mApplicationContext.registerReceiver(mPermissionReceiver,new IntentFilter(ACTION_USB_PERMISSION));
usbman.requestPermission(d, pi);
}
};
private class PermissionReceiver extends BroadcastReceiver {
private final IPermissionListener mPermissionListener;
public PermissionReceiver(IPermissionListener permissionListener) {
mPermissionListener = permissionListener;
}
@Override
public void onReceive(Context context, Intent intent) {
mApplicationContext.unregisterReceiver(this);
if (intent.getAction().equals(ACTION_USB_PERMISSION)) {
if (!intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
mPermissionListener.onPermissionDenied((UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE));
} else {
Log.l("Permission granted");
final UsbDevice dev = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (dev != null) {
if (dev.getVendorId() == VID_PRE && dev.getProductId() == PID_PRE) {
dispatchUpload(dev);
} else if(dev.getVendorId() == VID_POST && dev.getProductId() == PID_POST){
startHandler(dev);
}
} else {
Log.e("device not present!");
}
}
}
}
}
private BroadcastReceiver mPermissionReceiver = new PermissionReceiver(
new IPermissionListener() {
@Override
public void onPermissionDenied(UsbDevice d) {
Log.l("Permission denied on " + d.getDeviceId());
}
});
private void enumerate(IPermissionListener listener) {
Log.l("enumerating");
HashMap<String, UsbDevice> devlist = mUsbManager.getDeviceList();
Iterator<UsbDevice> deviter = devlist.values().iterator();
while (deviter.hasNext()) {
UsbDevice d = deviter.next();
Log.l("Found device: " + String.format("%04X:%04X", d.getVendorId(),
d.getProductId()));
if (d.getVendorId() == VID_PRE && d.getProductId() == PID_PRE) {
Log.l("Device under: " + d.getDeviceName());
if (!mUsbManager.hasPermission(d)){
listener.onPermissionDenied(d);
return
} else {
dispatchUpload(d)
return;
}
}
if (d.getVendorId() == VID_POST && d.getProductId() == PID_POST) {
Log.l("Device under: " + d.getDeviceName());
if (!mUsbManager.hasPermission(d)){
Log.l("no permission on scope");
listener.onPermissionDenied(d);
//it’s ok, user will grant permission
return;
} else {
Log.l("starting handler");
startHandler(d);
return;
}
}
}
Log.l("no more devices found");
mConnectionHandler.onDeviceNotFound();
}
[/code]
Leave a Reply