Как отключить ключ поиска и ключ камеры при отображении меню? - PullRequest
2 голосов
/ 19 мая 2011

Я создал меню в своем единственном упражнении следующим образом:

/ меню / my_menu_list.xml

   <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/mn_about" android:title="About"
            android:icon="@drawable/about" />
        <item android:id="@+id/mn_display_list" android:title="Display List"
            android:icon="@drawable/display_list" />
    </menu>

Также переопределите эти методы.

 @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.my_menu_list, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.mn_about:
                startActivity(new Intent(this, About.class));
                break;

            case R.id.mn_display_list:
                startActivity(new Intent(this, DisplayList.class));
                break;
            }
        }

Те работают отлично. Теперь мне нужно отключить ключ поиска и ключ камеры при отображении этого меню. Следующий код отлично работает для активности, но я не знаю, куда поместить этот код для меню.

 @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if ((keyCode == KeyEvent.KEYCODE_CAMERA)) {
                return false;
            }
            if ((keyCode == KeyEvent.KEYCODE_SEARCH)) {
                return false;
            }
            return super.onKeyDown(keyCode, event);
        }

Редактировать 1

Я отключил камеру для всего приложения. Для этого я добавил следующий тег получателя в файл манифеста:

<receiver android:name=".MyReceiver">
            <intent-filter android:priority="10000">
                <action android:name="android.intent.action.CAMERA_BUTTON" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter android:priority="12000">
                <action android:name="android.intent.action.VOICE_COMMAND" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter android:priority="11000">
                <action android:name="android.intent.action.SEARCH_LONG_PRESS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
    </receiver>

Также создан класс Receiver, расширяющий BroadcastReceiver.

public class Receiver extends BroadcastReceiver{

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

Это решено для камеры, но не работает при долгом поиске и голосовом наборе номера.

Редактировать 2 Я также попробовал следующий способ управления ключом Long_Press_Search. Но не работает.

    public class MyMenuInflater extends MenuInflater implements OnKeyListener {

        public MyMenuInflater(Context context) {
            super(context);
        }

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_SEARCH) {
                Log.d("KeyPress", "search");
                return true;
            }
            return false;
        }
   }

И изменил onCreateOptionsMenu () следующим образом.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MyMenuInflater inflater=new MyMenuInflater(this);
    inflater.inflate(R.menu.my_menu_list, menu);
    return true;
}

Не фиксирует событие нажатия клавиши.

Что мне нужно изменить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...