android - programacion - desactivar google now on tap
Anular el botón de inicio y el de atrás es caso de que un booleano sea verdadero (6)
Me pregunto si puedo anular la acción de la parte posterior y el botón de inicio en algunos casos. Normalmente, estos botones deberían reaccionar como siempre, pero en el caso de que alguna configuración sea verdadera, quiero anular los botones y dejar que invoquen 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
}
Llama a super.onBackPressed () para llamar al método normal. Ejemplo:
@Override
public void onBackPressed() {
if (activated) {
//doyourthing
} else {
super.onBackPressed()
}
}
Me pregunto si puedo anular la acción de la parte posterior y el botón de inicio en algunos casos.
Sí, puede anular el botón Home
.
He desarrollado una aplicación que deshabilita el botón duro, puede echar un vistazo. He tomado un botón de alternar que bloquea todos los botones para trabajar, excepto el botón de Encendido
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>
No, no puedes. Lo que puede hacer es superar el método y administrar el booleano dentro de él:
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"
}
Yo uso esto:
public void onBackPressed() {
switch (screen) {
case 1:
screen = 99;
setContentView(R.layout.menu);
break;
case 99:
finish();
break;
}
return;
}
Cuando estoy en otra pantalla (a diferencia de la pantalla de menú), configuro la pantalla de variables en 1. Cuando presiono el botón Atrás, vuelve a la pantalla del menú (en lugar de eliminar la aplicación). y le da a la variable de pantalla el número 99, y luego, cuando presiona el botón Atrás nuevamente, mata la aplicación.
Sin embargo, no puede cambiar el botón de inicio.
hacer que su variable variable booleana
boolean temp;
@Override
public void onBackPressed() { // call my backbutton pressed method when boolean==true
if(temp)
//your methode
else
finish();
}
En cuanto a anular el comportamiento del botón de inicio, no tiene suerte .
Sin embargo, si su aplicación es específica y tiene un público objetivo limitado, como aplicación entre organizaciones, quiosco de hospital, pedidos de restaurantes, puede intentar hacer que su aplicación sea Home (la aplicación de inicio). Puede encontrar un buen ejemplo aquí: Cómo escribir la aplicación Custom Launcher en Android
Y para anular los eventos clave hacia atrás, muchos ejemplos están ahí.
Por ejemplo:
- Capturar keypress con android
- Anular el botón Atrás para que funcione como el botón de inicio
- Android - ¿Cómo sobrescribir el botón "Atrás" para que no termine () mi actividad?