android - 在 Android 幼儿应用程序中禁用主页按钮?

标签 android replace children android-homebutton

我开发了一个应用程序,它是图片的幻灯片放映,当您点击它们时,每张图片都会播放声音。这就像一本适合 2-4 岁 child 的图画书。

问题是,由于 android 不会让您捕获主页按钮按下并基本上禁用它,当 parent 将手机交给他们的 child 无人看管时(勇敢的 parent ), child 可能会无意中退出应用程序然后调用电话或以其他方式调整手机。

目前还有另外两个应用程序针对此问题进行了伪修复。这些应用程序是 Toddler Lock 和 ToddlePhone。我已经尝试联系这些应用程序的开发者以获得一些指导,但他们不愿意透露任何信息,如果可以的话,但是这里的任何人有什么建议吗?

看起来这两个其他应用程序都像主屏幕替换应用程序。当您在这些应用程序上启用“ child 保护模式”时,系统会提示用户选择应用程序来执行操作,选项包括“Launcher、LauncherPro 等”。加上蹒跚学步的应用程序。然后你必须将蹒跚学步的应用程序设置为默认应用程序,瞧,手机被“锁定”,只有在你“解锁”手机时,才能使用组合键或触摸屏幕的四个角等方式“解锁”。您正常的主屏幕应用程序默认恢复。下次启用“ child 保护模式”时,您甚至不必将幼儿应用设为默认应用。

我了解到这两个应用程序在三星手机上存在问题,它们可能会导致无限的崩溃和重启循环,需要恢复出厂设置才能修复。显然,这不是问题的理想解决方案,但它看起来是目前唯一可用的解决方案。

有没有人对如何实现“ child 保护模式”有任何想法?

最佳答案

我需要让蹒跚学步的 child 锁定一个新的应用程序,并且不想使用启动器。 这是我所做的,您可以在 https://play.google.com/store/apps/details?id=com.justforkids.animalsounds 查看该应用程序

  1. 当锁被激活时,启动一个服务,当锁被去激活时停止
  2. 该服务检查运行最频繁的应用程序,如果不是我的 Activity ,该服务将启动我的 Activity
  3. 仍然存在一个问题,即当用户单击“主页”时,我的 Activity 需要大约 6 秒的时间才能再次启动。我认为这是 Android 中的一项安全功能,但不确定。为绕过此问题,当该服务检测到另一个应用程序可见时,它会添加一个顶部 View (作为警报窗口),在应用程序重新启动所需的几秒钟内覆盖主屏幕。

对于第 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>

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

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

你需要权限

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

关于android - 在 Android 幼儿应用程序中禁用主页按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278535/

相关文章:

unix - 从命令行 unix 查找和替换

javascript - 获取具有 ID 的父元素的子元素的子元素

java - 获取内部存储和 sd 卡的目录(如果存在)

unix - Shell 脚本 - 使用字符串列表搜索和替换多个文件中的文本

android - 将信息从 EditText 发送到 IME

windows - 有没有人在 ReactOS 上试用过他们的软件?

Javascript 递归地遍历子级

javascript - 使用javascript编辑子div的高度

java - 如何将项目从 Edittext 添加到 ListView ?

android - 无法在 Release模式下构建应用程序 - keystore 被篡改或密码不正确