How To Detect that Android Device is connected with USB OTG Or Not programmatically

后端 未结 1 1598
我寻月下人不归
我寻月下人不归 2021-02-14 13:45

I am working with custom OTG fingerprint scanner. I want to check that OTG is connected to my Android device or not in a specific android activity.

相关标签:
1条回答
  • 2021-02-14 14:05
    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);
            }  }   
    

    From any Activity you can call globel variable to check the current USB state:

     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"
    

    receiver:

     <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 讨论(0)
提交回复
热议问题