Android 动态注册的广播接收器(通过活动)不适用于操作\u USB\u设备\u连接

Android 动态注册的广播接收器(通过活动)不适用于操作\u USB\u设备\u连接,android,android-intent,broadcastreceiver,Android,Android Intent,Broadcastreceiver,为已分离的ACTION_USB_设备注册的广播接收器工作正常,但已连接的ACTION_USB_设备不工作。问题是,当启动操作意图\u USB\u设备\u连接时,不会调用onReceive() 这是我在onCreate()中注册接收者的代码 以下是BroadcastReceiver类的代码: private final BroadcastReceiver mUsbDeviceReceiver = new BroadcastReceiver() { @Override public

为已分离的ACTION_USB_设备注册的广播接收器工作正常,但已连接的ACTION_USB_设备不工作。问题是,当启动操作意图\u USB\u设备\u连接时,不会调用onReceive()

这是我在onCreate()中注册接收者的代码

以下是BroadcastReceiver类的代码:

private final BroadcastReceiver mUsbDeviceReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(getBaseContext(), "onRecieve", Toast.LENGTH_SHORT).show();
        String action = intent.getAction();
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {


            device = (UsbDevice) intent
                    .getParcelableExtra(UsbManager.EXTRA_DEVICE);
            Toast.makeText(
                    SUSB_Serial.this,
                    "ACTION_USB_DEVICE_ATTACHED:", Toast.LENGTH_LONG)
                    .show();
            Log.d("dj", "USB attached");
            connectUsb();


        } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {


            try{
                UsbDevice tempDevice = (UsbDevice) intent
                        .getParcelableExtra(UsbManager.EXTRA_DEVICE);

                if(tempDevice != null){

                    if(tempDevice.getProductId() == device.getProductId() 
                            && tempDevice.getVendorId() == device.getVendorId()){

                        Toast.makeText(SUSB_Serial.this,
                                "ACTION_USB_DEVICE_DETACHED:",
                                Toast.LENGTH_LONG).show();

                        Log.d("dj", "USB detached");

                        AlertDialog dialog = null;
                        AlertDialog.Builder builder = new AlertDialog.Builder(SUSB_Serial.this);
                        builder.setMessage("Data reading failed, connect back the devices to continue").setTitle("Device Detached!!").
                        setPositiveButton("Okay", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();

                            }
                        });

                        dialog = builder.create();
                        dialog.show();
                        Log.d("dj", "Releasing resources of USB");
                        releaseUsb();
                    }

                }

            }catch(Exception ex){
                Log.d("dj", "Missing device reference");
                ex.printStackTrace();
            }


        }
    }
};

这非常简单,但我忘了这么做……以下是USB_连接的意图过滤器无法从开发文档中工作的答案

还链接 向下滚动到页面底部以查看答案

private final BroadcastReceiver mUsbDeviceReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(getBaseContext(), "onRecieve", Toast.LENGTH_SHORT).show();
        String action = intent.getAction();
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {


            device = (UsbDevice) intent
                    .getParcelableExtra(UsbManager.EXTRA_DEVICE);
            Toast.makeText(
                    SUSB_Serial.this,
                    "ACTION_USB_DEVICE_ATTACHED:", Toast.LENGTH_LONG)
                    .show();
            Log.d("dj", "USB attached");
            connectUsb();


        } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {


            try{
                UsbDevice tempDevice = (UsbDevice) intent
                        .getParcelableExtra(UsbManager.EXTRA_DEVICE);

                if(tempDevice != null){

                    if(tempDevice.getProductId() == device.getProductId() 
                            && tempDevice.getVendorId() == device.getVendorId()){

                        Toast.makeText(SUSB_Serial.this,
                                "ACTION_USB_DEVICE_DETACHED:",
                                Toast.LENGTH_LONG).show();

                        Log.d("dj", "USB detached");

                        AlertDialog dialog = null;
                        AlertDialog.Builder builder = new AlertDialog.Builder(SUSB_Serial.this);
                        builder.setMessage("Data reading failed, connect back the devices to continue").setTitle("Device Detached!!").
                        setPositiveButton("Okay", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();

                            }
                        });

                        dialog = builder.create();
                        dialog.show();
                        Log.d("dj", "Releasing resources of USB");
                        releaseUsb();
                    }

                }

            }catch(Exception ex){
                Log.d("dj", "Missing device reference");
                ex.printStackTrace();
            }


        }
    }
};