Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Я думаю, что вы правы в отношении замены домашнего экрана. Блокировка малышей, которую я знаю, не переопределяет кнопку «Домашняя», потому что (по крайней мере, на моем LG GW620), когда в блокировке Noyddle Holding Home Button предлагает меню типа Alt-Tab, - который затем имеет значение для разбивки телефона.

Доступна приложение для замены домашнего экрана с исходным кодом, на сайте Android Dev:

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

Редактировать: также, 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 здесь более подробно:

Создайте макет наложения, например, файл заблокирован_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 и желе бобов и даст вам падение в приложении

Я заменил домашний пункт по умолчанию, используя следующий код:

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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top