对BroadcastReceiver的怀疑

时间:2018-10-23 22:14:11

标签: android

嗨,我正在使用以下代码

private boolean statusUSB = false;

private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action != null) {

            switch (action) {
                case UsbManager.ACTION_USB_DEVICE_DETACHED:
                    final UsbDevice detDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    final String detMsg="Device DEtached";
                    statusUSB = false;
                    Toast.makeText(context, "USB Disconnected", Toast.LENGTH_SHORT).show();
                    break;
                case UsbManager.ACTION_USB_DEVICE_ATTACHED:
                case UsbManager.ACTION_USB_ACCESSORY_ATTACHED:
                    final UsbDevice attDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    final String attMsg="Device atached";
                    statusUSB = true;
                    Toast.makeText(context, "USB Connected", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
        }
    }
};

要检测USB端口何时连接或断开连接,我还插入了一个标志:

statusUSB 

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate( R.menu.main, menu );

    if (statusUSB == true){
        // Opcion1
    }
    if (statusUSB == false){
        //Opcion2
    }

    return true;
}

事实是,当连接和断开USB端口时,Android会同时检测到这两种情况,但是该标志不会更改,或者我无法从菜单中读取该值,我做得还好吗?还是有另一种方式来提供此标志?

1 个答案:

答案 0 :(得分:1)

onCreateOptionsMenu()仅在第一次显示选项菜单时被调用一次。您正在尝试在此处更新菜单状态,该状态将不起作用。

要在每次显示菜单时更新菜单,应使用onPrepareOptionsMenu(Menu)

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (statusUSB == true){
        // Update menu
    }
    if (statusUSB == false){
        // Update menu
    }
}