Me preguntaba si puedo anular la acción de la espalda y el botón de inicio en algunos casos. Normalmente estos botones sólo debe reaccionar como siempre lo hacen, pero en un caso la configuración es cierto que desee reemplazar los botones y dejar que ellos llaman mis propios métodos.

Estoy usando estos dos métodos para anular estos botones:

  @Override
  public void onBackPressed() {    
  //call my backbutton pressed method when boolean==true
    }

  @Override
  public void onAttachedToWindow()    {                                                                                       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);    
   super.onAttachedToWindow(); 
   //call my homebutton pressed method when boolean==true
   }

OriginalEl autor Diego | 2012-04-05

6 Comentarios

  1. 37

    Me preguntaba si puedo anular la acción de la espalda y el botón de inicio en algunos casos.

    Sí, usted puede hacer anular Home botón.

    He desarrollado una aplicación con la que deshabilitar el botón duro, usted puede tener una mirada.
    Me he tomado un botón de alternar que bloquea todos los botón duro para trabajar con excepción de Poder botón

    public class DisableHardButton extends Activity {
    /** Called when the activity is first created. */
    TextView mTextView;
    ToggleButton mToggleButton;
    boolean isLock=false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mTextView=(TextView) findViewById(R.id.tvInfo);
    mToggleButton=(ToggleButton) findViewById(R.id.btnLock);
    mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    //TODO Auto-generated method stub
    isLock=isChecked;
    onAttachedToWindow();
    }
    });
    }
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
    if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
    mTextView.setText("KEYCODE_HOME");
    return true;
    }
    else
    return super.dispatchKeyEvent(event);
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    //TODO Auto-generated method stub
    if( (keyCode==KeyEvent.KEYCODE_BACK) && isLock)
    {
    mTextView.setText("KEYCODE_BACK");
    return true;
    }
    else
    return super.onKeyDown(keyCode, event);
    }
    @Override
    public void onAttachedToWindow()
    {  
    System.out.println("Onactivity attached :"+isLock);
    if(isLock)
    {   
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
    super.onAttachedToWindow();
    }
    else
    {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);     
    super.onAttachedToWindow();
    }
    }
    }

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
    android:id="@+id/tvInfo"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />
    <ToggleButton
    android:id="@+id/btnLock"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOff="UnLocked"
    android:textOn="Locked" />
    </LinearLayout>
    Wow, esto es genial, exactamente lo que estoy buscando!
    No lo sabía, pensaba que no podía cambiar, +1 🙂
    Genial!!! su trabajo perfectoo.
    CREO que esta manera de reemplazar el botón de inicio afortunadamente ya no funciona como de Android 4.0
    Sí, afortunadamente, este enfoque no funciona en Android 4.0.3.

    OriginalEl autor Azhar Shaikh

  2. 4

    Llamar a super.onBackPressed() para llamar al método normal.
    Ejemplo :

    @Override
    public void onBackPressed() {    
    if (activated) {
    //doyourthing
    } else {
    super.onBackPressed()
    }
    }

    OriginalEl autor NitroG42

  3. 3

    No no se puede. Lo que puedes hacer es ovveride el método y administrar el booleano en su interior:

    por ejemplo:

     public void onBackPressed() {    //call my backbutton pressed method when boolean==true
    if (myCondition) {
    //take care of my needs
    } else 
    //call super to let the back behavior be "normal"
    }

    OriginalEl autor Blackbelt

  4. 2

    Respecto a invalidar el comportamiento del Botón de Inicio usted está fuera de suerte.

    Sin embargo, si tu aplicación es una aplicación específica y han limitado el público objetivo, como inter-organización de la aplicación, hospital quiosco, restaurante pedido, usted puede intentar hacer su aplicación como en Casa (el lanzador de la aplicación). Usted puede encontrar un buen ejemplo aquí: Cómo Escribir Personalizado Lanzador de App en Android

    Y reemplazar la parte de atrás de los eventos clave, muchos de los ejemplos son de allí.

    Por ejemplo:

    1. Captura de pulsación de tecla con android
    2. Reemplazar botón atrás para actuar como botón de inicio
    3. Android – Cómo Reemplazar el botón «Atrás» para no Terminar() mi Actividad?

    OriginalEl autor Adil Soomro

  5. 1

    hacer su variable booleana variable miembro

    boolean temp;
    @Override
    public void onBackPressed() {    //call my backbutton pressed method when boolean==true
    if(temp)
    //your methode
    else
    finish();
    }

    OriginalEl autor vipin

  6. 1

    Yo uso este:

    public void onBackPressed() {
    switch (screen) {
    case 1:
    screen = 99;
    setContentView(R.layout.menu);
    break;
    case 99:
    finish();
    break;
    }
    return;
    }

    Cuando estoy en una pantalla de otros (aparte de la pantalla de menú), me puse la variable de la pantalla 1.
    Cuando presione el botón volver, se vuelve a la pantalla de menú (en lugar de matar a la aplicación).
    y darle la pantalla variable el número 99, a continuación, cuando usted pulse el botón de nuevo, se mata a la aplicación.

    Sin embargo, no se puede cambiar el botón de inicio.

    OriginalEl autor Bigflow

Dejar respuesta

Please enter your comment!
Please enter your name here