Пользовательский лаунчер для Android

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

AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light">
    <activity android:name=".activity.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activity.KidModeActivity"
        android:enabled="false"
        android:clearTaskOnLaunch="true"
        android:launchMode="singleTask"
        android:stateNotNeeded="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

KidModeActivity имеет android:enabled="false". Чтобы перейти в детский режим, я включу это действие, а затем создам средство выбора запуска для пользователей.

ComponentName launcherActivity = new ComponentName(this, KidModeActivity.class);
                    getPackageManager().setComponentEnabledSetting(launcherActivity,
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
                // Create launcher chooser
                Intent selector = new Intent(Intent.ACTION_MAIN);
                selector.addCategory(Intent.CATEGORY_HOME);
                startActivity(selector);

Я могу выбрать свой собственный лаунчер Когда в пользовательском лаунчере:

  • Кнопка домой нормально нажимается

  • Кнопка назад в порядке

  • Но я все еще могу нажать кнопку «Недавние» и увидеть там свое приложение (!!!), я также могу провести пальцем, чтобы закрыть свое приложение.

Кто-нибудь помогает? Заранее спасибо!


person Community    schedule 10.09.2016    source источник
comment
Невозможно. Для этого вам понадобится android.permission.REMOVE_TASKS, и он предоставляется только для системных приложений.   -  person Anupam    schedule 10.09.2016
comment
Привет @Anupam, не могли бы вы рассказать мне, как реализовать лаунчер, подобный этому приложению play.google.com/store/apps/details?id=co.mindquake.nester В этом приложении после выбора некоторых приложений для детей, когда люди нажимают кнопку ПЕРЕЙТИ К KIDMOD, в первый раз (выбирайте программу запуска Nester, как всегда) После использования приложения людям не нужно ничего делать, кроме как выйти, и предыдущая программа запуска (например, программа запуска Asus по умолчанию) устанавливается программно. В следующий раз, когда люди используют это приложение Nester, программа запуска Nester уже установлена (нет лаунчера)   -  person    schedule 11.09.2016


Ответы (1)


В предыдущей версии Android было Intent.ACTION_CLOSE_SYSTEM_DIALOGS, которое вы могли запустить, чтобы проверить список последних приложений, а затем запустить это намерение, чтобы закрыть любые такие системные диалоги. Но он также закрывает диалоговые окна кнопки питания и другие системные диалоговые окна. Также не будет работать с Android Lollipop и выше.

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

Чтобы получить максимальную активность на устройстве Lollipop, вам нужно разрешить приложению получать статус использования и получать максимальную активность.

UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
long time = System.currentTimeMillis();
// We get usage stats for the last 40 seconds
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 40, time);

Если вашему приложению требуется поддержка устройств до леденца на палочке, получите максимальную активность с помощью getTasks.

person sbr1308    schedule 19.02.2017