2016-05-24 81 views
0

我尝试连接自定义USB设备。我已经做了一切与Android的文档一步一步,但我仍然在连接对象获得空指针。这里是我的活动:USB设备连接时出现NullPointerException

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

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

+0

你的USB许可添加到您的AndroidManifest.xml? –

+0

获取usbReceiver中的连接对象。在接收器中:boolean granted = arg1.getExtras()。getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED); if(granted){ connection = usbManager.openDevice(device); } – Amit

回答

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

+0

THX Sathish所在,但我有这个声明,在我的清单和问题依然存在。 – Bartos

+0

试试这个http://stackoverflow.com/questions/28137280/how-to-grant-permission-to-open-usb-device-with-usb-manager-opendevice-always –

+0

我已经完成了一切:/ – Bartos