Отключить домашнюю кнопку в приложении android toddler?

Я разработал приложение и приложение, которое представляет собой слайд-шоу с изображениями, каждое из которых воспроизводит звук при нажатии на них. Это как книга с картинками в возрасте от 2 до 4 лет.

Проблема заключается в том, что, поскольку андроид не позволит вам фиксировать нажатие кнопки дома и, по сути, отключает ее, когда родители дают телефону своему ребенку играть без присмотра (смелый родитель), ребенок может выйти из приложения, а затем совершать вызовы или В противном случае настройте телефон.

Есть еще два приложения, которые в настоящее время имеют решение psuedo для этой проблемы. Приложения – это Toddler Lock и ToddlePhone. Я пробовал обратиться к разработчикам этих приложений за некоторыми указаниями, но они не хотели раскрывать что-либо, что, если прекрасно, но есть ли у кого-нибудь предложения?

Похоже, что оба этих приложения действуют как приложение для замены домашнего экрана. Когда вы включаете «защищенный от детей» режим в этих приложениях, пользователю предлагается выбрать и приложение для действия, а варианты «Launcher, LauncherPro и т. Д.», Плюс приложение toddler. Затем вы должны сделать приложение toddler по умолчанию и voila, телефон «заблокирован» и может быть «разблокирован» только с помощью комбинации клавиш или касания четырех углов экрана и т. Д., Когда вы «разблокируете» телефон. Ваше нормальное приложение для домашнего экрана по умолчанию восстановлено. Вам даже не нужно делать приложение toddler по умолчанию при следующем включении «режима защиты от детей».

Я прочитал, что у этих двух приложений есть проблемы с телефонами Samsung, и они могут вызвать бесконечный цикл с аварийным завершением и перезагрузкой, требующий восстановления заводских настроек. Очевидно, это не идеальное решение проблемы, но похоже, что на данный момент доступно только одно.

Есть ли у кого-нибудь идеи о том, как реализовать «режим защиты от детей»?

Я думаю, вы правы в отношении замены домашнего экрана. Блокировка Toddler, которую я знаю, не переопределяет домашнюю кнопку, потому что (по крайней мере, на моем LG GW620), в то время как в Toddle Lock, удерживая кнопку home, появляется меню типа ALT-TAB, которое затем приводит к сбою телефона.

Существует доступное приложение для замены экрана с исходным кодом на сайте разработчика Android:

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

EDIT: также ADW.Launcher:

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

Мне нужно было запереть замок в новом приложении и не хотелось использовать пусковую установку. Вот что я сделал, вы можете увидеть приложение на странице 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> 

В вашем сервисе, чтобы показать или скрыть использование наложения:

  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 и jelly bean и даст вам крах в приложении

Я заменил пусковую установку 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>