Android USB communication

Permissions:- 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] Resources:- Need to make device_filter.xml file in resource(/xml/device_filter.xml). [code lang=”xml”] <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="6002" product-id="0002"/> </resources> [/code] Source:- [code lang=”java”] private final UsbManager mUsbManager; protected static final String ACTION_USB_PERMISSION = "com.xyz.android.USB"; mUsbManager…


  • Permissions:-

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]

  • Resources:-

Need to make device_filter.xml file in resource(/xml/device_filter.xml).

[code lang=”xml”]
<?xml version="1.0" encoding="utf-8"?>

<resources>
<usb-device vendor-id="6002" product-id="0002"/>
</resources>
[/code]

  • Source:-
[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

Related Posts

Discover more from Prabhu System Technology

Subscribe now to keep reading and get access to the full archive.

Continue reading