我开发了一个应用程序,它是一个图片幻灯片放映,当您点击它们时,每个图片都会播放声音。这就像一本适合2-4岁孩子的图画书。
问题是,由于 Android 不会让您捕获按下主页按钮并基本上禁用它,因此当父母将手机交给孩子与无人看管(勇敢的父母)一起玩时,孩子可能会无意中退出应用程序,然后拨打电话或否则调整手机。
目前还有另外两个应用程序针对此问题提供了伪修复。这些应用程序是 Toddler Lock 和 ToddlePhone。我尝试联系这些应用程序的开发人员寻求一些指导,但他们不愿意透露任何信息,如果可以的话,但是这里有人有任何建议吗?
看起来这两个其他应用程序的作用就像主屏幕替换应用程序。当您在这些应用程序上启用“儿童防护模式”时,系统会提示用户选择要执行操作的应用程序,选项包括“Launcher、LauncherPro 等”。加上幼儿应用程序。然后,您必须将幼儿应用程序设置为默认应用程序,瞧,手机被“锁定”,并且在“解锁”手机时只能使用组合键或触摸屏幕的四个角等来“解锁”。您的正常主屏幕应用程序默认已恢复。下次启用“儿童安全模式”时,您甚至不必将幼儿应用程序设置为默认应用程序。
我读到这两个应用程序在三星手机上存在问题,它们可能会导致无限的崩溃和重新启动循环,需要恢复出厂设置才能修复。显然,这不是解决问题的理想解决方案,但它看起来是目前唯一可用的解决方案。
有人对如何实施“儿童安全模式”有任何想法吗?
我需要让幼儿锁定新应用程序,并且不想使用启动器。
这就是我所做的,您可以在以下位置查看该应用程序https://play.google.com/store/apps/details?id=com.justforkids.animalsounds https://play.google.com/store/apps/details?id=com.justforkids.animalsounds
- 当锁被激活时,启动一个服务,当锁被停用时停止它
- 该服务检查运行最多的应用程序,如果不是我的活动,该服务将启动我的活动
- 仍然存在一个问题,当用户单击“home”时,我的 Activity 再次启动需要大约 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>
在您的服务中显示或隐藏叠加层使用:
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" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)