在Android幼儿园应用中禁用主页按钮?

cme*_*ell 14 android children replace android-homebutton

我开发和应用程序是一个幻灯片放映的图片,当你点击它们时每个播放声音.这就像2-4岁的图画书.

问题是,因为android不会让你捕获主页按钮按下并基本上禁用它,当父母将电话给他们的孩子玩无人看管(勇敢的父母)时,孩子可能无意中退出应用程序然后拨打电话或否则调整手机.

还有另外两个应用程序目前有针对此问题的伪造修复程序.这些应用程序是Toddler Lock和ToddlePhone.我曾尝试联系这些应用程序的开发人员以获取一些指导,但他们并不愿意透露任何内容,如果没有问题,但是这里有人有任何建议吗?

看起来这两个应用程序都像主屏幕替换应用程序.当您在这些应用程序上启用"儿童防护模式"时,系统会提示用户选择和应用该操作,选项为"Launcher,LauncherPro等".再加上幼儿应用.然后你必须使幼儿应用程序成为默认设置,然后手机被"锁定",只能在你"解锁"手机时使用按键组合或触摸屏幕的四个角等"解锁".您正常的主屏幕应用程序默认恢复.下次启用"儿童防护模式"时,您甚至不必将幼儿应用程序设为默认应用程序.

我已经读过这两个应用程序与三星手机有问题,它们可能导致无限的崩溃和重启循环,需要恢复出厂设置.显然,这不是问题的理想解决方案,但它看起来是目前唯一可用的解决方案.

有没有人对如何实施"儿童防范模式"有任何想法?

yoa*_*oah 17

我需要在一个新的应用程序中锁定幼儿,并且不想使用启动器.以下是我的操作,您可以在https://play.google.com/store/apps/details?id=com.justforkids.animalsounds上查看该应用.

  1. 激活锁定后,启动服务,并在取消激活锁定时将其停止
  2. 该服务检查最热门的应用程序,如果它不是我的活动,该服务将启动我的活动
  3. 还有一个问题是,当用户点击"主页"时,我的活动再次启动需要大约6秒钟.我认为这是Android中的安全功能,但不确定.为了绕过这一点,当服务检测到另一个应用程序可见时,它会添加一个顶视图(作为警报窗口),覆盖主屏幕,使应用程序重新启动几秒钟.

对于第3步,这里有更多细节:

创建覆盖布局,例如文件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>
Run Code Online (Sandbox Code Playgroud)

在您的服务中显示或隐藏叠加层使用:

  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);
  }
Run Code Online (Sandbox Code Playgroud)

您需要获得许可

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Run Code Online (Sandbox Code Playgroud)


Col*_*ard 5

我认为你对主屏更换是对的.幼儿锁我知道不会覆盖主页按钮,因为(至少在我的LG GW620上)在Toddle Lock中按住主页按钮会弹出ALT-TAB类型菜单 - 这会导致手机崩溃.

在Android开发站点上有一个主屏幕替换应用程序,带有源代码:

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

编辑:还有,ADW.Launcher:

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