2017-01-27 13 views
7

Pracuję z niestandardowym skanerem linii papilarnych OTG. Chcę sprawdzić, czy OTG jest podłączony do mojego urządzenia z Androidem, czy nie w określonej aktywności Android.Jak wykryć, że urządzenie z Androidem jest połączone z USB OTG lub nie programowo

+0

Czy ktoś ma rozwiązanie tego? – Hanan

+1

Czy próbowałeś już [hosta USB] (https://developer.android.com/guide/topics/connectivity/usb/host.html)? być może odbiornik 'android.hardware.usb.action.USB_DEVICE_ATTACHED' pomoże. jeśli potrzebujesz komunikacji do przodu [TUTAJ] (http://blog.blecentral.com/2015/10/01/handling-usb-connections-in-android/) masz dobry przykład (dla Arduino, ale głównie o stronie Android-a). ale jeśli jest to "specyficzne urządzenie z Androidem", to może istnieje niestandardowy ROM lub masz "specyficzny" dokument dla tego urządzenia. – snachmsm

+0

Tak @snachmsm Używam tej samej techniki. Po podłączeniu urządzenia sprawdzam identyfikator dostawcy i identyfikator urządzenia, a następnie odpowiednio ustawiam stan urządzenia. – Hanan

Odpowiedz

1
public class BootUpReceiver extends BroadcastReceiver { 

private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; 
    String TAG = "OTG "; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
//  Log.e("USB", "Decive Connected -> " + action); 
//Initilizing globel class to access USB ATTACH and DETACH state 
     final GlobalClass globalVariable = (GlobalClass) context.getApplicationContext(); 

     if (action.equalsIgnoreCase("android.hardware.usb.action.USB_DEVICE_ATTACHED")) { 

      UsbDevice device = (UsbDevice) intent 
        .getParcelableExtra(UsbManager.EXTRA_DEVICE); 
      if(device != null) { 
       int vendorID = device.getVendorId(); 
       int productID = device.getProductId(); 
       if(String.valueOf(productID).equalsIgnoreCase(context.getString(R.string.productID/*product id of your specific device*/))&& (String.valueOf(vendorID).equalsIgnoreCase(context.getString(R.string.vendorID/*vendor id of your specific device*/)))){ 
    //If Product and Vendor Id match then set boolean "true" in global variable 
        globalVariable.setIs_OTG(true); 
       }else{ 
        globalVariable.setIs_OTG(false); 
       } 
      } 
     } else if (action.equalsIgnoreCase("android.hardware.usb.action.USB_DEVICE_DETACHED")) { 
     //When ever device Detach set your global variable to "false" 
      globalVariable.setIs_OTG(false); 
     } } 

od wszelkich działań można nazwać globel zmienna, by sprawdzić aktualny stan USB:

final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); 
         if (globalVariable.is_OTG()) { 
          //Perform your functionality 
         } 

GlobalClass:

public class GlobalClass extends Application { 

    private boolean is_OTG = false; 

    public boolean is_OTG() { 
     return is_OTG; 
    } 

    public void setIs_OTG(boolean is_OTG) { 
     this.is_OTG = is_OTG; 
    } 

} 

manifist:

<application 
     android:name="com.GlobalClass" 

odbiornik:

<receiver 
      android:name=".BootUpReceiver" 
      android:enabled="true" > 
      <!-- <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 

       <category android:name="android.intent.category.HOME" /> 
      </intent-filter>--> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

      <intent-filter> 
       <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
       <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 
      </intent-filter> 
      <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /> 

     </receiver> 
+0

Czy to źródło działa dla połączenia * USB OTG * Pendrive? Jak mogę uzyskać całkowitą dostępną przestrzeń, jeśli uda mi się uzyskać udane połączenie? A jak uzyskać identyfikator dostawcy urządzenia i identyfikator produktu po nawiązaniu połączenia? Właściwie muszę podłączyć * USB OTG * pendrive i uzyskać dostępny rozmiar z podłączonego urządzenia. Każda pomoc zostanie doceniona. –

+0

Użyj powyższego kodu, gdy zostanie dołączone OTG, tygiel będzie nadawał, a Ty możesz pobrać identyfikator użytkownika i identyfikator dostawcy. – Hanan

+0

Pobierz identyfikator użytkownika i identyfikator dostawcy, który jest w porządku. Ale moim drugim wymaganiem jest uzyskanie wszystkich dostępnych folderów i uzyskanie całkowitej dostępnej przestrzeni podłączonego urządzenia USB. Jak mogę to zrobić? –

0

Drogi, ponieważ podłączasz zewnętrzne urządzenie OTG, musisz zintegrować SDK urządzenia, aby uzyskać szczegółowe informacje.

Powiązane problemy