USB设备连接时出现NullPointerException

时间:2016-05-24 07:08:53

标签: java android usb usb-drive

我尝试连接自定义USB设备。我已经用android doc一步一步地做了一切,但我仍然在连接对象上得到空指针。这是我的活动:

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;
        }
    }

这就是我尝试连接USB设备的方式:

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();
            }

但是连接仍然是空的:/请帮助。

1 个答案:

答案 0 :(得分:0)

试试这个,

<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>

更多信息:点击here