2011-11-09 13 views
6

Ho un'app che dovrebbe essere sicura per i bambini. Ciò significa che blocca ogni singolo tocco del tasto, ma si occupa di premere a lungo per uscire dall'app. Questo è così, il bambino sarà al sicuro dal fare (troppo) cose brutte mentre gioca. Fino alla versione 2.3.4, sono riuscito a raggiungere questo obiettivo. Tuttavia, ora ho 2 problemi:app per bambini sicura su android

  1. su Honeycomb, ho le notifiche della barra di stato che possono essere inserite a pressione. Inoltre, ho il tasto switch-windows che può essere premuto. L'unica cosa che ci è riuscita è di oscurare la barra di stato.
  2. Su sandwich gelato (utilizzando l'emulatore, non ho ancora un dispositivo reale con questa versione), quando si chiama il codice successivo, ottengo un'eccezione che non può nemmeno essere catturata. l'eccezione:

    java.lang.IllegalArgumentException: il tipo di finestra non può essere modificato dopo l'aggiunta della finestra.

il codice:

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

Cosa posso fare?

+0

Come stai bloccando le presse per la chiave di casa? – slayton

+0

@slayton hai provato quello che ho appena scritto? è scritto nella classe di attività. –

+0

@androiddeveloper Ricevo anche lo stesso errore nella mia applicazione e sto anche usando lo stesso codice onAttachedTowindow() ... come hai risolto questo problema? –

risposta

2

per Android versione 4 (API 14 e successive), potrebbe essere possibile utilizzare: getWindow(). SetType (WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

tuttavia, sull'emulatore, non blocca il pulsante home, quindi è piuttosto inutile. Non so ancora se funziona bene su dispositivi reali.

forse è possibile utilizzare la soluzione alternativa seguente: impostare l'app come l'applicazione schermata iniziale predefinita. se il pulsante home è stato premuto mentre l'applicazione era attiva, acquisirla e non fare nulla. se il tasto home è stato premuto mentre l'applicazione era sullo sfondo (o chiusa), aprire l'app home predefinita precedentemente selezionata.

In alternativa, potrei chiedere all'utente di impostare l'app Home Launcher predefinita come mia per ogni volta che viene avviata, e reimpostarla di nuovo (o alla precedente, o reset totale) dopo che è stata chiusa.

è possibile? se sì, come?


Da Android Lollipop (versione 5.0 che è API 21), v'è un modo di schermo i pin, e questo può essere attivata dall'utente o l'applicazione (link here):

ci sono due modi per attivare il blocco su schermo:

manualmente: gli utenti possono abilitare schermo pinning in Impostazioni> Sicurezza> schermo Puntare, e selezionare le attività che vogliono pin toccando l'icona pin verde nella schermata Recenti. Programmaticamente: per attivare il blocco dello schermo a livello di codice, chiama startLockTask() dall'app. Se l'app richiedente non è un proprietario del dispositivo, all'utente viene richiesta la conferma . Un'app del proprietario del dispositivo può chiamare il metodo setLockTaskPackages() per abilitare la pinnatura delle app senza il passaggio di conferma utente .

Cosa fa? leggere ulteriormente e vedi:

Quando bloccaggio compito è attivo, il seguente comportamento accade:

La barra di stato è vuota, e le notifiche utente e le informazioni di stato sono nascosti. I pulsanti Home e Recent Apps sono nascosti. Altre app non possono avviare nuove attività. L'app attuale può avviare nuove attività , a condizione che ciò non crei nuove attività. Quando il blocco dello schermo viene richiamato dal proprietario del dispositivo, l'utente rimane bloccato sull'app finché l'app non chiama stopLockTask(). Se lo screen pinning è un'attività da un'altra app che non è un proprietario del dispositivo o direttamente dall'utente, l'utente può uscire tenendo premuti i pulsanti Indietro e Ultimo.

Non solo, ma secondo this post, è anche possibile attivare o disattivare questo senza user-conferma, e si esce da questo stato speciale sarebbe sotto la logica della tua app.

Sembra la cosa perfetta per l'app per bambini.

1

Per me sotto il codice si nasconde il tasto home a ICS (versione 4.4.4)

public void onCreate(Bundle savedInstanceState) { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION); 
      super.onAttachedToWindow(); 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

    } 
+0

Come hai trovato questa soluzione? –

+0

Questo ha funzionato per me. –