0

I try to connect with my custom USB Device. I've done everything step by step with android doc but I still get null pointer at connection object. Here's my activity:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        registerReceiver(usbReceiver, filter);

    usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
    Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
    while (deviceIterator.hasNext()) {
        UsbDevice device = deviceIterator.next();

        if (device.getVendorId() == 1659 && device.getProductId() == 8963) {
            this.device = device;
            usbManager.requestPermission(device, mPermissionIntent);
            Toast.makeText(MainActivity.this, "vendor: " + device.getVendorId() + "ID " + device.getProductId() , Toast.LENGTH_SHORT).show();
            break;
        }
    }

And this is how I try to connect with USB device :

mTestButton = (Button) findViewById(R.id.button);
        mTestButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                usbInterface = device.getInterface(0);
                if (connection != null) {
                    connection = usbManager.openDevice(device);
                    connection.claimInterface(usbInterface, false);

                for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
                    UsbEndpoint end = usbInterface.getEndpoint(i);
                    if (end.getDirection() == UsbConstants.USB_DIR_IN) {
                        usbEndpointIn = end;

                    } else {
                        usbEndpointOut = end;
                    }
                }

                //SEND START COMMAND TO  THE USB DEVICE;
                int result = connection.bulkTransfer(usbEndpointOut, "START".getBytes(), "START".getBytes().length, 1000);
                Log.e("SEND RESULT", result + "");


                //START READING in run method
                readThread = new Thread((Runnable) MainActivity.this);
                readThread.start();

            } else {
                Toast.makeText(MainActivity.this, "Connection is null", Toast.LENGTH_SHORT).show();
            }

But connection is still null :/ Help, please.

Bartos
  • 1,007
  • 3
  • 15
  • 38
  • Did you add usb Permission to your androidManifest.xml ? – Sathish Kumar J May 24 '16 at 07:15
  • Obtain the connection object in the usbReceiver. In the receiver: boolean granted = arg1.getExtras().getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED); if (granted) { connection = usbManager.openDevice(device); } – Amit May 24 '16 at 08:51

1 Answers1

0

Try this,

<manifest ...>
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />
...
<application>
    <activity ...>
        ...
        <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" />
    </activity>
</application>
</manifest>

device_filter.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
  <usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" />
</resources>

More Info : click here

Sathish Kumar J
  • 4,280
  • 1
  • 20
  • 48