Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Detección de la pulsación de tecla Menú en Android

Estoy tratando de detectar cuando el botón de menú físico en mi teléfono Android ha sido presionado. A pesar de que el código de abajo funcionaría, pero no lo hace. ¿A dónde voy mal por favor?

El error devuelto es 'Modificador no válido para el parámetro onKeyDown; Sólo se permite final "

  • Configuración del color de fondo del tema de Android
  • ¿Qué hace exactamente la anotación @hide de Android?
  • Parámetros incorrectos: BadParametersError: Los parámetros eran incorrectos. Queríamos capacidades requeridas en la cuadrícula de Selenium mientras ejecuta Appium
  • Proguard infierno - no puede encontrar la clase referenciada
  • ¿Cómo Google consigue posts animados en su aplicación de G +?
  • Cómo eliminar el ". 0" en un número entero cuando se utiliza doble en java?
  • public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { // Do Stuff } else { return super.onKeyDown(keyCode, event); } } 

  • GetLocationOnScreen () en onCreate () sólo devuelve ceros
  • Comparación del uso del reconocimiento de voz en Android: por Intent o on-thread?
  • Archivo de configuración de Android Studio ORMLite - No se pudo encontrar el directorio de Raw
  • Cómo configurar el menú en la barra de herramientas en Android
  • Picasso carga de imagen de devolución de llamada
  • MapView muestra los detalles de la superposición cuando se hace clic
  • 6 Solutions collect form web for “Detección de la pulsación de tecla Menú en Android”

    Me gustaría buscar un evento clave, en lugar de un evento, con onKeyUp .

     public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { // ........ return true; } return super.onKeyUp(keyCode, event); } 

    Devolvemos true porque estamos manejando el acontecimiento; Devuelve false si desea que el sistema maneje el evento también.

    También puede hacer todo esto en su instancia de Activity porque Activity es una subclase indirecta conocida de KeyEvent .

    Basado en todo lo anterior, esto parece ser la implementación correcta que consumirá eventos de tecla de menú "up" solamente y pasará otros eventos claves a la superclase.

     public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { // ... return true; } else { return super.onKeyUp(keyCode, event); } } 
     public boolean onKeyDown(int keyCode, KeyEvent event) { //Checking for the "menu" key if (keyCode == KeyEvent.KEYCODE_MENU) { if (mDrawerLayout.isDrawerOpen(mDrawerList)) { mDrawerLayout.closeDrawers(); } else { mDrawerLayout.openDrawer(Gravity.RIGHT); } return true; } else { return super.onKeyDown(keyCode, event); } } 

    Si manejas el evento simplemente devuelve true, si no devuelves false para que el sistema Android pueda pasar el evento al resto de los componentes para manejarlo.

    Asegúrese de anular el método onKeyDown en su clase de actividad. Hay otro método onKeyDown en la clase View pero no se llamará si se presiona la tecla de menú.

    Tengo una respuesta muy fría de esta pregunta 🙂 He intentado por última vez 1 año lol y sólo foundout la solución 3 días antes.Por favor, mire la respuesta. Usted necesita hacer una clase de Septate de observador de Hogar. Exactamente use el siguiente código con el nombre de HomeWatcher.

     public class HomeWatcher { static final String TAG = "HomeWatcher"; private Context mContext; private IntentFilter mFilter; private OnHomePressedListener mListener; private InnerRecevier mRecevier; public interface OnHomePressedListener { public void onHomePressed(); public void onHomeLongPressed(); //public void onLockLongPressed(); } public HomeWatcher(Context context) { mContext = context; mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } public void setOnHomePressedListener(OnHomePressedListener listener) { mListener = listener; mRecevier = new InnerRecevier(); } public void startWatch() { try{ if (mRecevier != null) { mContext.registerReceiver(mRecevier, mFilter); } }catch(Exception e){} } public void stopWatch() { try{ if (mRecevier != null) { mContext.unregisterReceiver(mRecevier); } }catch(Exception e){} } class InnerRecevier extends BroadcastReceiver { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"; final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; //final String SYSTEM_DIALOG_REASON_Lock = "lock"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if (reason != null) { Log.e(TAG, "action:" + action + ",reason:" + reason); if (mListener != null) { if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { mListener.onHomePressed(); } else if (reason .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) { mListener.onHomeLongPressed(); } /* else if (reason .equals(SYSTEM_DIALOG_REASON_Lock)) { mListener.onLockLongPressed(); }*/ } } } } } } 

    Después de hacer la clase HomeWatcher. Debe declarar el Homewatcher en la clase deseada en la que desea detectar el botón de inicio y el botón de Aplicaciones recientes.

     public class MainActivity extends Activity { private HomeWatcher mHomeWatcher; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Override public void onHomePressed() { Log.e(TAG, "onHomePressed"); } @Override public void onHomeLongPressed() { Log.e(TAG, "recent apps"); } }); mHomeWatcher.startWatch(); } catch (Exception e) { } } 

    Al final de esto sólo tiene que agregar onPause y OnResume Overide método como este.

     @Override protected void onResume() { super.onResume(); try { mHomeWatcher.startWatch(); } catch (Exception e) { } } @Override protected void onPause() { super.onPause(); try { mHomeWatcher.stopWatch(); } catch (Exception e) { } } 

    Una respuesta muy simple y hermosa. Esperando los votos y la respuesta aceptada: p

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.