2010-11-25 2 views
14

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

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

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

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

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

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

ответ

5

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

Существует домашний экран замены приложение доступно, с исходным кодом, на андроида сайте Dev:

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

EDIT: Кроме того, ADW.Launcher:

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

+1

поэтому я хочу сделать что-то подобное. Я установил adw. Как отключить кнопки? – 2011-09-10 19:49:36

+0

Ознакомьтесь с ответом yoah ниже. Это лучшее решение для этого вопроса. – venkat 2014-07-03 07:23:55

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

Редактировать: Это работает во всех старых r версия андроида. Но не будет работать в ICS и желе бобов и даст вам сбой в приложении

+0

Не работает на 4.0.x – 2012-09-23 03:06:06

0

Я заменил По умолчанию 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); 
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> 

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

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" /> 
0

Для версий 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> 
Смежные вопросы