Enumerazione usb Android

Sto scrivendo un'applicazione host USB di android per cui cerco di enumerare i dispositivi connessi con tablet. Seguiamo il codice nella documentazione host di android USB nel sito dello sviluppatore.

Il mio codice è il seguente

  • Come visualizzare l'image da URL su Android
  • Esegui l'applicazione in background
  • Perché la mia app lancia un 'android.permission.REBOOT SecurityException'?
  • Android TranslateAnimation si ripristina dopo l'animation
  • La chiave Google Map in Android?
  • Come posso modificare / diminuire la dimensione del filatore Android?
  • AndroidUSBActivity

    public class AndroidUSBActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); USBClass usb = new USBClass(); ArrayList<String> deviceList = usb.GetUSBDevices(getBaseContext()); final CharSequence[] items = deviceList.toArray(new CharSequence[deviceList.size()]); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Reader"); builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { String selectedDevice = (String) items[item]; dialog.dismiss(); TextView DeivceName = (TextView)findViewById(R.id.textView1); DeivceName.setText(selectedDevice); } }); AlertDialog alert = builder.create(); alert.show(); } } 

    USBClass

     public class USBClass { private static UsbManager mManager = null; private static HashMap<String, UsbDevice> mdevices; private static PendingIntent mPermissionIntent; private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if(device != null){ //call method to set up device communication Log.i("usb", "permission granted for device " + device); } } else { Log.i("usb", "permission denied for device " + device); } } } } }; public ArrayList<String> GetUSBDevices(Context context){ mManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); mdevices = new HashMap<String, UsbDevice>(); ArrayList<String> deviceList = new ArrayList<String>(); mPermissionIntent = PendingIntent.getBroadcast(context, 0, new Intent("com.android.example.USB_PERMISSION"), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); context.registerReceiver(mUsbReceiver, filter); // check for existing devices for (UsbDevice device : mManager.getDeviceList().values()) { String deviceName = null; UsbDeviceConnection connection = null; if(device.getVendorId() == 0x0123){ mManager.requestPermission(device, mPermissionIntent); connection = mManager.openDevice(device); byte rawBuf[] = new byte[255]; int len = connection.controlTransfer(0x80, 0x06, 0x0302, 0x0409, rawBuf, 0x00FF, 60); rawBuf = Arrays.copyOfRange(rawBuf, 2, len); deviceName = new String(rawBuf); deviceList.add(deviceName); mdevices.put(deviceName, device); } } context.unregisterReceiver(mUsbReceiver); return deviceList; } } 

    logcat

     06-13 10:13:54.556: D/dalvikvm(2219): Late-enabling CheckJNI 06-13 10:13:54.586: I/System.out(2219): Sending WAIT chunk 06-13 10:13:54.586: W/ActivityThread(2219): Application bri.sample is waiting for the debugger on port 8100... 06-13 10:13:54.596: I/dalvikvm(2219): Debugger is active 06-13 10:13:54.786: I/System.out(2219): Debugger has connected 06-13 10:13:54.786: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:54.986: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:55.186: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:55.406: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:55.596: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:55.796: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:55.996: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:56.206: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:56.406: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:56.645: I/System.out(2219): waiting for debugger to settle... 06-13 10:13:56.846: I/System.out(2219): debugger has settled (1337) 06-13 10:13:57.116: E/UsbManager(2219): exception in UsbManager.openDevice 06-13 10:13:57.116: E/UsbManager(2219): java.lang.SecurityException: User has not given permission to device UsbDevice[mName=/dev/bus/usb/001/004,mVendorId=1254,mProductId=20758,mClass=0,mSubclass=0,mProtocol=0,mInterfaces=[Landroid.hardware.usb.UsbInterface;@41679100] 06-13 10:13:57.116: E/UsbManager(2219): at android.os.Parcel.readException(Parcel.java:1327) 06-13 10:13:57.116: E/UsbManager(2219): at android.os.Parcel.readException(Parcel.java:1281) 06-13 10:13:57.116: E/UsbManager(2219): at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:340) 06-13 10:13:57.116: E/UsbManager(2219): at android.hardware.usb.UsbManager.openDevice(UsbManager.java:250) 06-13 10:13:57.116: E/UsbManager(2219): at bri.sample.USBClass.GetUSBDevices(USBClass.java:66) 06-13 10:13:57.116: E/UsbManager(2219): at bri.sample.AndroidUSBActivity.onCreate(AndroidUSBActivity.java:19) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.Activity.performCreate(Activity.java:4465) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.ActivityThread.access$600(ActivityThread.java:123) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 06-13 10:13:57.116: E/UsbManager(2219): at android.os.Handler.dispatchMessage(Handler.java:99) 06-13 10:13:57.116: E/UsbManager(2219): at android.os.Looper.loop(Looper.java:137) 06-13 10:13:57.116: E/UsbManager(2219): at android.app.ActivityThread.main(ActivityThread.java:4424) 06-13 10:13:57.116: E/UsbManager(2219): at java.lang.reflect.Method.invokeNative(Native Method) 06-13 10:13:57.116: E/UsbManager(2219): at java.lang.reflect.Method.invoke(Method.java:511) 06-13 10:13:57.116: E/UsbManager(2219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-13 10:13:57.116: E/UsbManager(2219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 06-13 10:13:57.116: E/UsbManager(2219): at dalvik.system.NativeStart.main(Native Method) 06-13 10:13:57.566: D/dalvikvm(2219): threadid=1: still suspended after undo (sc=1 dc=1) 06-13 10:14:04.266: D/AndroidRuntime(2219): Shutting down VM 06-13 10:14:04.266: W/dalvikvm(2219): threadid=1: thread exiting with uncaught exception (group=0x40a531f8) 06-13 10:14:04.296: E/AndroidRuntime(2219): FATAL EXCEPTION: main 06-13 10:14:04.296: E/AndroidRuntime(2219): java.lang.RuntimeException: Unable to start activity ComponentInfo{bri.sample/bri.sample.AndroidUSBActivity}: java.lang.NullPointerException 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread.access$600(ActivityThread.java:123) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.os.Handler.dispatchMessage(Handler.java:99) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.os.Looper.loop(Looper.java:137) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread.main(ActivityThread.java:4424) 06-13 10:14:04.296: E/AndroidRuntime(2219): at java.lang.reflect.Method.invokeNative(Native Method) 06-13 10:14:04.296: E/AndroidRuntime(2219): at java.lang.reflect.Method.invoke(Method.java:511) 06-13 10:14:04.296: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-13 10:14:04.296: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 06-13 10:14:04.296: E/AndroidRuntime(2219): at dalvik.system.NativeStart.main(Native Method) 06-13 10:14:04.296: E/AndroidRuntime(2219): Caused by: java.lang.NullPointerException 06-13 10:14:04.296: E/AndroidRuntime(2219): at bri.sample.USBClass.GetUSBDevices(USBClass.java:68) 06-13 10:14:04.296: E/AndroidRuntime(2219): at bri.sample.AndroidUSBActivity.onCreate(AndroidUSBActivity.java:19) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.Activity.performCreate(Activity.java:4465) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 06-13 10:14:04.296: E/AndroidRuntime(2219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 06-13 10:14:04.296: E/AndroidRuntime(2219): ... 11 more 

    PROBLEMA

    ho collegato il dispositivo e quindi installo l'applicazione. La prima volta in cui viene avviata l'applicazione, viene sganciato.

    Kndly mi aiuta, grazie

  • Errore di installazione: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
  • La printing del bluetooth di Android ha smesso di lavorare su 4.1
  • API Google Places per errore Android: Status {statusCode = NETWORK_ERROR, risoluzione = null}
  • OAuth + Twitter su Android: la chiamata non riesce
  • come salvare i file audio registrati in un'altra cartella in modo programmato?
  • Mapview getLatitudeSpan e getLongitudeSpan non funzionano
  • One Solution collect form web for “Enumerazione usb Android”

    L'arresto si verifica quando si tenta di accedere con il dispositivo

     connection = mManager.openDevice(device); 

    Si blocca perché lancia una SecurityException perché non hai ottenuto l'authorization dall'utente per utilizzare il dispositivo. Sembra che hai cercato di get l'authorization dall'utente nella row prima di questo

     mManager.requestPermission(device, mPermissionIntent); 

    Ma è necessario capire che la chiamata a requestPermission() è asynchronous. Non ritorna immediatamente con l'authorization. Quello che fa è che mostra l'utente una window di dialogo e chiede all'utente se concederà l'authorization all'applicazione. Una volta che l'utente concede o nega l'authorization, la window di dialogo viene respinta e il PendingIntent che hai passato a requestPermission() viene utilizzato per trasmettere PendingIntent che indica che l'authorization è stata concessa (o no). È necessario ascoltarlo in un BroadcastReceiver registrato e quando viene chiamato il metodo onReceive() è ansible esaminare gli extra nel onReceive() ricevuto e decidere come procedere. Solo se l'utente ti concede l'authorization, puoi passare per call openDevice() .

    Questo sembra un po 'complicato, ma è così che funziona.

    Fondamentalmente, devi call

     mManager.requestPermission(device, mPermissionIntent); 

    e quindi attendere il rilascio dell'authorization prima di cercare di accedere al dispositivo.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.