2012-07-03 12 views
8

Estoy trabajando en un proyecto de investigación para mi universidad. La aplicación nunca se lanzará al mercado y solo se usará para investigación.Deshabilitar el botón de inicio en la aplicación de pantalla de inicio?

He hecho una aplicación de pantalla de inicio usando el código de muestra de Google Homescreen. Allí, realicé una actividad que es una pantalla bloqueada. Mientras esté allí, el usuario no debería poder salir del bloqueo presionando Inicio, Atrás, etc. El botón Atrás parece estar deshabilitado, pero el botón de inicio no. He intentado varias soluciones de internet y stackoverflow, que no funcionan.

Este es el código importante:

(Aviso: Logcat muestra "Botón presionado: 4"! Para el Back-botón pero nada para el botón de inicio)

En mi bloqueo de pantalla Actividad :

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     Log.v(TAG, "BUTTON PRESSED: " + new Integer(keyCode).toString()); 

     if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
      return true; 
     } else if ((keyCode == KeyEvent.KEYCODE_CALL)) { 
      return true; 
     } 
     else if ((keyCode == KeyEvent.KEYCODE_HOME)){ 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public void onAttachedToWindow() { 
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
     super.onAttachedToWindow(); 
    } 

parece que el onAttachedToWindow() Método que no funciona desde la versión Android 4. ¿Cómo puedo desactivar el homebutton?

EDIT: El archivo de manifiesto:

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.home" > 

    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.GET_TASKS" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.SET_WALLPAPER" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 
    <uses-permission android:name="android.permission.NFC" /> 
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 

    <permission android:name="android.permission.WRITE_SECURE_SETTINGS" > 
    </permission> 

    <application 
     android:icon="@drawable/ic_launcher_home" 
     android:label="@string/home_title" > 
     <service android:name=".MyService" > 
     </service> 

     <activity 
      android:name="Home" 
      android:launchMode="singleInstance" 
      android:stateNotNeeded="true" 
      android:theme="@style/Theme" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.HOME" /> 
       <category android:name="android.intent.category.DEFAULT" /> 


      </intent-filter> 

      <receiver android:name=".ScreenReceiver" > 
       <intent-filter> 
        <action android:name="android.intent.action.SCREEN_ON" /> 
        <action android:name="android.intent.action.SCREEN_OFF" /> 
        <action android:name="android.intent.action.USER_PRESENT" /> 
       </intent-filter> 
      </receiver> 
     </activity> 
     <activity 
      android:name="Wallpaper" 
      android:icon="@drawable/bg_android_icon" 
      android:label="Wallpaper" > 
      <intent-filter> 
       <action android:name="android.intent.action.SET_WALLPAPER" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LockPage" > 
      <intent-filter> 
       <action android:name="android.intent.action.SCREEN_ON" /> 
       <action android:name="android.intent.action.SCREEN_OFF" /> 
       <action android:name="android.intent.action.USER_PRESENT" /> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.HOME" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.MONKEY" /> 
       <category android:name="android.intent.category.DEFAULT" /> 

       <action android:name="android.intent.action.MAIN" /> 

       <data android:mimeType="text/plain" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:scheme="http" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

http://stackoverflow.com/questions/3898876/how-to -disable-the-home-key/8889913 # 8889913 – user370305

+1

Esto parece apuntar a exactamente lo mismo que publiqué? ¿O me estoy perdiendo el punto que intentas hacer? – hamena314

+0

¿Has probado esto [uno?] (Http://stackoverflow.com/questions/10025660/override-home-and-back-button-is-case-a-boolean-is-true/10025904#10025904) –

Respuesta

5

Esto puede llegar un poco tarde, he estado en una situación algo similar. Mi problema era que no quería que los usuarios salgan de la pantalla de llamadas durante las llamadas telefónicas, pero no pude evitarlo, así que en lugar de eso, simplemente lo devolví al frente cada vez que lo dejaron.

En su caso, usted podría simplemente llevar su aplicación al revés en pausa:

@Override 
protected void onPause() { 
    super.onPause(); 
     // Close and reopen app or bringToFront() 
} 

Así dejando abriría automáticamente la aplicación de nuevo. Debería intentar reabrir su actividad o llevarla al frente y ver qué funciona mejor. La reapertura puede ser imperceptible si elimina todas las animaciones y agrega FLAG_ACTIVITY_NO_ANIMATION.

1

Esto no es posible sin cambiar la fuente de Android: [mencionado aquí] [1].

También esto rompería el ciclo de actividad de Android, que no es recomendable.

+0

-1, esto la pregunta es para LockScreen, no es una aplicación normal. – Matsemann

+0

En la versión anterior del código, el programa era solo una actividad. Pude apuntar el botón de inicio a la actividad en sí y, por lo tanto, usarlo solo para este propósito. ¿Tal vez hay una forma de evitarlo? – hamena314

2

Parece que la presión del botón de inicio no se reenvía a la aplicación en una aplicación de pantalla de inicio. Por lo tanto, hice una aplicación normal, coloqué mi receptor de emisión y mi servicio y ahora puedo desactivar el botón de inicio y el botón de retroceso.

Todavía se puede utilizar el botón Aplicaciones recientes para saltar de mi pantalla de bloqueo. Puede inundarlo con entradas ficticias que podrían funcionar.

Espero que ayude a alguien!

2
@Override 
public void onAttachedToWindow() 
{ 
    super.onAttachedToWindow(); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   
} 

Y ahora controlar el evento clave de esta manera,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     Log.i("Home Button","Clicked"); 
    } 
    if(keyCode==KeyEvent.KEYCODE_BACK) 
    { 
     finish(); 
    } 
return false; 
} 
1

Este código funciona en mi solicitud

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
} 
Cuestiones relacionadas