动态注册的广播接收器(通过Activity)不适用于ACTION_USB_DEVICE_ATTACHED

时间:2015-04-20 19:21:07

标签: android android-intent broadcastreceiver

为ACTION_USB_DEVICE_DETACHED注册的广播接收器工作正常,但同样不适用于ACTION_USB_DEVICE_ATTACHED。问题是当触发ACTION_USB_DEVICE_ATTACHED的意图时,不会调用onReceive()。

这是我的代码,我在onCreate()

中注册了接收者
registerReceiver(mUsbDeviceReceiver, new IntentFilter(
            UsbManager.ACTION_USB_DEVICE_DETACHED));

    registerReceiver(mUsbDeviceReceiver, new IntentFilter(
            UsbManager.ACTION_USB_DEVICE_ATTACHED));

以下是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();
            }


        }
    }
};

1 个答案:

答案 0 :(得分:0)

这非常简单,但我忘了这样做......以下是USB文件无法使用的文档中的USB_ATTACHED意图过滤器的答案。

enter image description here

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