2012-08-02 114 views
2

對於我的應用程序,我需要使android設備充當USB主機。它需要發送和接收來自USB連接設備的數據。我已經通過了USB Host in Android Developers Site,並開發示例代碼如下:將USB設備置於USB主機模式?

Main.java

public class UsbDemoProjActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btn = (Button)findViewById(R.id.button1); 
     btn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(), "button click", 30).show(); 

       Intent it = new Intent(UsbDemoProjActivity.this,Second.class); 
       startActivity(it); 
      } 
     }); 
    } 
} 

Second.java:

public class Second extends Activity{ 
    UsbDevice device; 
    UsbManager mUsbManager; 
    PendingIntent mPermissionIntent; 
    private static String ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     System.out.println("111111111"); 
     mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
     ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION"; 
     System.out.println("2222222222"); 
     HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); 
     device = deviceList.get("deviceName"); 
     System.out.println("33333333333"); 
     mPermissionIntent = PendingIntent.getBroadcast(this, 0, 
              new Intent(ACTION_USB_PERMISSION), 0); 
     System.out.println("444444444444"); 
     IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); 
     System.out.println("555555555555"); 
     registerReceiver(mUsbReceiver, filter); 
     System.out.println("66666666666"); 
     mUsbManager.requestPermission(device, mPermissionIntent); 
    } 

    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      System.out.println("7777777777777"); 
      if (ACTION_USB_PERMISSION.equals(action)) { 
       synchronized (this) { 
        System.out.println("88888888888"); 
        UsbDevice device = (UsbDevice)intent.getParcelableExtra( 
                 UsbManager.EXTRA_DEVICE); 

        if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { 
         if(device != null){ 
          System.out.println("99999999999999"); 
          //call method to set up device communication 
         } 
        } else { 
         //Log.d(TAG, "permission denied for device " + device); 
         System.out.println("permission denied for device" + device); 
        } 
       } 
      } 
     } 
    }; 
} 

然而,當我在Main.java點擊按鈕頁面顯示錯誤:

不幸的是USBDemo PROJ已停止

和logcat中顯示錯誤按照下面的圖片,但這裏的system.output()線顯示其在Second.java類中聲明。任何人都可以請幫助我什麼是我的應用程序中的錯誤?

此外,我在示例代碼中使用正確的方法訪問USB主機模式下的設備?任何人都可以給我一個更好的方法嗎

enter image description here

回答

0

我使用slickdev圖書館跟我的串口設備,所以我不知道你的代碼。它不是onDataReceived()?這可能僅僅是圖書館的功能,但...

我們的清單應該都有這樣在它:

<uses-feature android:name="android.hardware.usb.host" android:required="true"></uses-feature> 

,並在

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