2010-11-25 6 views
14

Ich habe entwickelt und App, die eine Diashow von Bildern ist, die jeweils einen Ton spielen, wenn Sie sie antippen. Es ist wie ein Bilderbuch für 2-4 Jahre.Deaktivieren Sie die Home-Taste in Android-Kleinkind-App?

Das Problem ist, da Android nicht zulassen, dass Sie eine Home-Taste drücken und deaktivieren Sie es im Wesentlichen, wenn Eltern das Kind ihrem Kind geben, mit unbeaufsichtigt zu spielen (tapfere Eltern), kann das Kind versehentlich die App verlassen und dann Anrufe tätigen oder auf andere Weise das Telefon optimieren.

Es gibt zwei andere Apps, die derzeit eine psuedo-Korrektur für dieses Problem haben. Die Apps sind ToddlerPhone und ToddlerPhone. Ich habe versucht, die Entwickler dieser Apps um Rat zu fragen, aber sie waren nicht bereit, etwas zu veröffentlichen, was zwar gut, aber hat jemand hier irgendwelche Vorschläge?

Es sieht so aus, als ob diese beiden anderen Apps wie eine Home Screen Ersatz App funktionieren. Wenn Sie den "kindersicheren Modus" für diese Apps aktivieren, wird der Benutzer aufgefordert, die Aktion auszuwählen und eine App auszuwählen. Die Auswahlmöglichkeiten lauten "Launcher, LauncherPro, usw.". plus die Kleinkind-App. Sie müssen dann die Kleinkind-App zum Standard machen und voila, das Telefon ist "gesperrt" und kann nur mit einer Tastenkombination "entsperrt" werden oder die vier Ecken des Bildschirms usw. berühren, wenn Sie das Telefon "entsperren". Ihre Standard-Startseite App Standard wiederhergestellt. Sie müssen die Kleinkind-App nicht einmal zum Standard machen, wenn Sie das nächste Mal den "kindersicheren Modus" aktivieren.

Ich habe gelesen, dass diese beiden Apps Probleme mit Samsung-Handys haben und sie können eine unendliche Crash-und-Neustart-Schleife verursachen, die ein Factory-Reset benötigt, um zu beheben. Offensichtlich ist dies nicht die ideale Lösung für das Problem, aber es scheint die einzige Lösung zu sein, die an dieser Stelle verfügbar ist.

Hat jemand irgendwelche Ideen, wie man einen "kindersicheren Modus" implementiert?

Antwort

5

Ich denke, Sie haben Recht bezüglich des Home-Bildschirm-Ersatzes. Toddler Lock Ich weiß, dass die Home-Taste nicht überschrieben wird, da (zumindest bei meinem LG GW620) während der Toddle-Lock-Taste die Home-Taste das ALT-TAB-Menü aufruft - was dann zum Absturz des Telefons führt.

Es ist ein Startbildschirm Ersatz App zur Verfügung, mit Quellcode, auf der Android Entwickler-Website:

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

EDIT: auch, ADW.Launcher:

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

+1

so möchte ich etwas ähnliches tun. Ich habe adw installiert. Wie deaktiviere ich die Tasten? –

+0

Überprüfen Sie die Antwort von yoah unten. Es ist die beste Lösung für diese Frage. – venkat

1
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; 
     } 
     } 

Bearbeiten: Dies funktioniert in allen alten r-Version von Android. Aber nicht in ICS und Jelly Bean arbeitet und geben Sie Absturz in app

+0

Funktioniert nicht auf 4.0.x –

+0

@ sixeightzero, aber SO hat nicht angegeben, Android-Version in Frage ..! Ich habe die Antwort für einige Erläuterungen bearbeitet –

0

ich den Standard-Startseite Launcher mit dem folgenden Code ersetzt:

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); 
17

Ich brauchte Kleinkind Sperre in einem neuen App zu haben, und wollte keinen Launcher verwenden.Hier ist, was ich tat, können Sie die App auf https://play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. siehe Wenn die Sperre aktiviert wird, einen Dienst starten, und es stoppen, wenn Sperre deaktiviert
  2. Der Service überprüft die Top-Lauf App, und wenn es ist nicht meine Aktivität, der Dienst startet meine Aktivität
  3. Es gab immer noch ein Problem, dass, wenn der Benutzer auf "Home" klickt, es etwa 6 Sekunden dauert, bevor meine Aktivität erneut gestartet wird. Ich nehme an, das ist ein Sicherheitsmerkmal in Android, aber nicht sicher. Wenn der Dienst erkennt, dass eine andere App sichtbar ist, fügt er eine Draufsicht (als Warnfenster) ein, die den Startbildschirm für die wenigen Sekunden abdeckt, die die App zum Neustarten benötigt.

Für Schritt 3 sind hier weitere Details:

das Overlay-Layout erstellen, zum Beispiel Datei 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> 

In Ihrem Dienst die Overlay Verwendung ein- oder auszublenden:

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); 
    } 

Sie müssen die Erlaubnis

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
+0

Viel viel besser, um dies auszuführen! BRAVO! – AutoM8R

+0

Bitte können Sie mir helfen, Top-View, die den Home-Bildschirm für einige Sekunden umfasst .. hinzufügen. Vielen Dank im Voraus. –

+0

@ AmolSawant96Kuli: Können Sie die Draufsicht erstellen? – venkat

0

Für Versionen 4.0 und höher können Sie Android-Sicherheitseinschränkungen vermeiden und Ihre App als Startprogramm festlegen. Fügen Sie das zu Ihrer Manifest-Datei hinzu:

<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> 
Verwandte Themen