在Android的小孩应用程序禁用主页button?

我已经开发和应用程序是一个幻灯片放映的图片,当你点击他们每个发声。 这就像一本2-4岁的图画书。

问题是,由于Android不会让你捕获一个主页button,实质上禁用它,当父母把电话给他们的孩子玩无人看pipe(勇敢的父母),孩子可以不经意地退出应用程序,然后拨打电话或否则调整手机。

还有两个其他应用程序,目前有这个问题的修复程序。 这些应用程序是幼儿锁和ToddlePhone。 我已经试过联系这些应用程序的开发者的一些指导,但他们不愿意透露任何东西,如果没问题,但这里有人有什么build议吗?

它看起来像这些其他应用程序都像一个主屏幕replace应用程序。 当您在这些应用程序上启用“childproof模式”时,会提示用户select并应用该操作,并且选项为“Launcher,LauncherPro等”。 加上蹒跚学步的应用程序。 然后,你必须使幼儿应用程序的默认和瞧,手机是“locking”,只能用一个组合键或触摸屏幕的四个angular落,当你“解锁”电话“只能解锁”。 您正常的主屏幕应用默认恢复。 下一次启用“儿童安全模式”时,您甚至不必将幼儿应用程序设置为默认应用程序。

我已经读过,这两个应用程序有三星手机的问题,他们可以导致无限的崩溃和重新启动循环,需要工厂重置来解决。 显然,这不是解决问题的理想方法,但看起来这是目前唯一可用的方法。

有没有人有任何想法如何实施“防止儿童模式”?

Solutions Collecting From Web of "在Android的小孩应用程序禁用主页button?"

我认为你对主屏replace是正确的。 幼儿锁我知道不会覆盖主页button,因为(至less在我的LG GW620),而在持有主页button的Toddle锁带来了ALT – TABtypes的菜单 – 这往往会导致手机崩溃。

有一个主屏幕replace应用程序可用,与源代码,在Android开发网站:

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

编辑:也,ADW.Launcher:

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

我需要在新的应用程序中locking幼儿,并且不想使用启动器。 这是我做的,你可以在https://play.google.com/store/apps/details?id=com.justforkids.animalsounds看到这个应用程序

  1. 当locking被激活时,启动一个服务,并在locking被禁用时停止
  2. 该服务检查顶部正在运行的应用程序,如果它不是我的活动,服务启动我的活动
  3. 仍然有一个问题,当用户点击“家”时,我的活动再次启动大约需要6秒。 我认为这是Android的安全function,但不能确定。 要绕过这一点,当服务检测到另一个应用程序可见时,它会添加一个覆盖主屏幕的顶视图(作为警报窗口),以便重新启动应用程序。

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

创build覆盖布局,例如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> 

在您的服务中显示或隐藏覆盖使用:

  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" /> 
 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; } } 

编辑:这适用于所有旧版本的Android。 但不会在ICS和果冻豆,并会给你在应用程序崩溃

我用下面的代码replace了Default Home启动器:

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

对于4.0及更高版本,您可以避开Android安全限制,并将您的应用设置为启动器。 把这个添加到你的清单文件中:

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