virtuales tactiles studio samsung retroceso programacion para pantalla home funciona funcion fisicos desactivar celular cambiar botones boton activar android button

tactiles - manual de programacion android pdf



Detectando tecla de menú física presiona en Android (6)

Intento detectar cuando se ha presionado el botón de menú físico en mi teléfono Android. Pensé que el código siguiente funcionaría, pero no es así. ¿Dónde me estoy equivocando, por favor?

El error devuelto es ''Modificador ilegal para el parámetro onKeyDown; solo final está permitido ''

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { // Do Stuff } else { return super.onKeyDown(keyCode, event); } }


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


En función de todo lo anterior, esta parece ser la implementación correcta que consumirá únicamente los eventos "arriba" de la tecla de menú y transmitirá otros eventos clave a la superclase.

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


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


Tengo una respuesta muy buena de esta pregunta :) He intentado por 1 año pasado jajaja y acabo de encontrar la solución 3 días antes. Mire la respuesta. Necesitas hacer una clase de septate de vigilante de hogar. Utilice exactamente 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 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 solo necesitas agregar el método onPause y onResume Overide 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


onKeyUp un evento clave arriba , en lugar de un evento inactivo , con onKeyUp .

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

Devolvemos la true porque estamos manejando el evento; devuelve false si quieres 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 .


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); } }