服务开始时,活动损失会集中

时间:2017-08-16 21:47:07

标签: android android-service android-lifecycle android-menu

这是当前的工作流程,我目前在活动中有一个onCreateOptionsMenu和onOptionsItemSelected实现。

包含布局(java类)并与活动一起显示的服务。是在活动的onCreate里面开始的。

但问题现在是关键事件,例如 onKeyDown()等 都在服务类中注册。

如何将焦点重新放回活动,以便能够捕获活动中定义的Key事件。

我尝试过使用localBroadcastManager并从dispatchKey

中解雇它
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    switch (event.getKeyCode()) {
        case KeyEvent.KEYCODE_MENU:
            Utils.broadcastKeyEvent(getContext(), event);
            return true;
        case KeyEvent.KEYCODE_DPAD_LEFT:
            Utils.broadcastKeyEvent(getContext(), event);
            return true;
        case KeyEvent.KEYCODE_DPAD_RIGHT:
            Utils.broadcastKeyEvent(getContext(), event);
            return true;
        case KeyEvent.KEYCODE_DPAD_CENTER:
            Utils.broadcastKeyEvent(getContext(), event);
            return true;
        case KeyEvent.KEYCODE_BACK:
            MiscUtils.broadcastKeyEvent(getContext(), event);
            return true;

     }  
}

我在活动中收到了keyEvent,并且能够。 openOptionsMenu并关闭它。但主要问题是一旦菜单打开,它就不会反映菜单项上的keyEvents。虽然keyEvent是在接收器内部接收的。

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        KeyEvent keyEvent = intent.getParcelableExtra(Constants.KEY_PRESSED_EVENT);
        Log.d(TAG, "Receiver got ketEventCode : " + keyEvent.getKeyCode());
        switch (keyEvent.getKeyCode()) {
            case KeyEvent.KEYCODE_MENU:
                if (isMenuOpened)
                    openOptionsMenu();
                else
                    closeOptionsMenu();
                break;
            case KeyEvent.KEYCODE_BACK:
                return true;
            case KeyEvent.KEYCODE_DPAD_LEFT:                    
                return true;
            case KeyEvent.KEYCODE_DPAD_RIGHT:
                return true;
        }
    }
};

0 个答案:

没有答案