Domanda

Ho sviluppato e app che è una presentazione di immagini che ogni gioco un suono quando li rubinetto. E 'come un libro illustrato per le età 2-4.

Il problema è, dal momento che Android non permette di catturare una pressa tasto home ed essenzialmente disattivarlo, quando i genitori danno il telefono per il loro bambino a giocare con incustodito (genitore coraggioso), il bambino può inavvertitamente chiudere l'applicazione e poi effettuare chiamate o altrimenti modificare il telefono.

Ci sono altre due applicazioni che attualmente hanno una correzione pseudo per questo problema. Le applicazioni sono Toddler Lock e ToddlePhone. Ho provato a contattare gli sviluppatori di queste applicazioni per alcune indicazioni, ma non sono stati disposti a rivelare tutto ciò che, se va bene, ma qualcuno qui ha qualche suggerimento?

Sembra che entrambe queste altre applicazioni stanno agendo come un sostituto app schermata iniziale. Quando si attiva la modalità "a prova di bambino", a quelle applicazioni all'utente viene richiesto di scegliere e app per l'azione e le scelte sono "Launcher, LauncherPro, etc." più il bambino app. È quindi necessario fare il bambino app di default e voilà, il telefono è "bloccata" e solo può essere "sbloccato" utilizzando una combinazione di tasti o di toccare i quattro angoli dello schermo, ecc quando si "sblocca" il telefono. il vostro normale applicazione di default schermata iniziale ripristinato. Non hanno nemmeno bisogno di fare il bambino app di default la prossima volta che si attiva la modalità "a prova di bambino".

Ho letto che queste due applicazioni hanno problemi con i telefoni Samsung e possono causare un crash-un e-restart-ciclo infinito che richiede un ripristino di fabbrica per correzione. Ovviamente questo non è la soluzione ideale al problema, ma sembra che l'unico availiable a questo punto.

Qualcuno ha qualche idea su come realizzare una "modalità a prova di bambino"?

È stato utile?

Soluzione

ti penso abbia ragione per quanto riguarda la sostituzione schermata iniziale. Toddler Lock So non sostituisce il tasto home, perché (almeno sul mio LG GW620), mentre in Toddle blocco tenendo premuto il tasto home si apre il menu tipo ALT-TAB -. Che poi tende a mandare in crash il telefono

C'è una sostituzione app schermata iniziale a disposizione, con il codice sorgente, sul sito dev Android:

http://developer.android.com/resources/samples/Home/ index.html

EDIT: anche, adw.launcher:

http://code.google.com/p/adw-launcher-android /

Altri suggerimenti

avevo bisogno di avere bambino blocco in una nuova applicazione, e non volevo usare un lanciatore. Ecco quello che ho fatto, è possibile vedere l'applicazione in https: / /play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. Quando il blocco è attivo, avviare un servizio, e arrestarlo quando il blocco è disattivato
  2. I controlli di servizio l'applicazione in esecuzione in alto, e se non è la mia attività, i lanci di servizio la mia attività
  3. C'era ancora un problema che quando l'utente fa clic su "casa", ci vogliono circa 6 secondi prima che la mia attività è lanciato di nuovo. Presumo che questa è una caratteristica di sicurezza in Android, ma non è sicuro. Per bypassare questo, quando le rileva servizio che un'altra applicazione è visibile, si aggiunge una vista dall'alto (come una finestra di avviso) che copre lo schermo di casa per i pochi secondi necessari per l'applicazione rilancio.

Per il punto 3, ecco i dettagli:

Crea il layout di sovrapposizione, ad esempio il file locked_overlay.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#d0000000"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:text="@string/app_name"
        android:textColor="#fff"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Locked mode is on"
        android:textColor="#fff"
        android:textSize="18sp" />

    </LinearLayout>

</FrameLayout>

Nel vostro servizio per mostrare o nascondere l'uso di sovrapposizione:

  private View lockedOverlay = null;

  private void hideLockedOverlay() {
    if (lockedOverlay != null) {
      WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
      windowManager.removeView(lockedOverlay);
      lockedOverlay = null;
    }
  }

  private void showLockedOverlay() {
    if (lockedOverlay != null) {
      return;
    }

    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    WindowManager.LayoutParams viewLayoutParams = new WindowManager.LayoutParams(
    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
        PixelFormat.TRANSLUCENT);
    viewLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;

    LayoutInflater inflater = LayoutInflater.from(this);
    lockedOverlay = inflater.inflate(R.layout.locked_overlay, null);
    windowManager.addView(lockedOverlay, viewLayoutParams);
  }

È necessario il permesso

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Add in to your Main Activity
@Override 
    public void onAttachedToWindow()
    {  
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();  
    }

And Override Key down event

@Override 
    public boolean onKeyDown(int iKeyCode, KeyEvent event)
    {

        if(iKeyCode == KeyEvent.KEYCODE_BACK || iKeyCode == KeyEvent.KEYCODE_HOME) 
        {
            return true;
        }
       }

Modifica Questo funziona in tutte le versioni precedenti di Android. Ma non funziona in ICS e Jelly Bean e vi darà accelerato di app

Ho sostituito il lanciatore iniziale predefinita utilizzando il seguente codice:

Intent selector = new Intent("android.intent.action.MAIN");
selector.addCategory("android.intent.category.HOME");
selector.setComponent(new ComponentName("android","com.android.internal.app.ResolverActivity"));
startActivity(selector);

Per le versioni 4.0 e versioni successive è possibile evitare restrizioni di sicurezza di Android e impostare la vostra applicazione, come un lanciatore. Aggiungi questo al vostro file manifesto:

<uses-permission android:name="android.permission.GET_TASKS" />

 <activity
    android:launchMode="singleInstance"
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.HOME" />
    </intent-filter>
</activity>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top