Режим киоска / Закрепление экрана в Android Wear

Я разрабатываю приложение Android Wear для Sony Smartwatch 3 с Android Lollipop и не могу найти способ реализовать работающий режим киоска.
Я искал везде, но ничего не работает.
Также пробовал закреплять экран но нет возможности сделать это на часах (вручную), и добавление startLockStart() к моему onCreate, похоже, ничего не дает - я все еще могу выйти из приложения.

Будем очень признательны за любую помощь или подтверждение того, что это невозможно.


person Eitan Levinzon    schedule 24.12.2015    source источник


Ответы (2)


Убедитесь, что вы используете Android L MR1 (Android 5.1). В устройствах Sony с L MR0 (Android 5.0) реализация Google startLockTask содержал ошибку, которая позволяла выйти из приложения.

Поскольку это ванильный код Google, вполне вероятно, что такая же ситуация и на других OEM-устройствах.

Также убедитесь, что lockTaskMode вашего приложения не равно 1 или 3, если вы не используете приложение для администрирования устройства.

Надеюсь это поможет.

/Марек (сотрудник Sony Mobile)

person Marek Pola    schedule 24.12.2015
comment
Как изменить lockTaskMode ? - person Eitan Levinzon; 25.12.2015
comment
Он определен в манифесте приложения AndroidManifest.xml. Вы должны быть найдены со значением по умолчанию 0. - person Marek Pola; 27.12.2015
comment
@MarekPola, кажется, я не могу заставить его работать ... Я также пробовал все способы превратить приложение в владельца устройства, но NFC всегда переводит мой телефон в приложение для ношения, команда adb не работает и создает device_owner.xml в данные/система часов не дают обратной связи (должны ли?) - person Someonation; 10.05.2016

Я написал блог на Medium, чтобы реализовать режим киоска на Android Wear. Он полностью работает на Wear OS 2.X и на 90% на Wear OS 1.X. Пожалуйста, проверьте на Medium.

Шаги:

1: REORDER_TASKS: переупорядочить ваше приложение, чтобы оно было сверху в onPause приложения.

ActivityManager activityManager = (ActivityManager) getApplicationContext()
                .getSystemService(Context.ACTIVITY_SERVICE);

        activityManager.moveTaskToFront(getTaskId(), 0);

2: установить категории для активности в манифесте:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

3: переопределить функциональность кнопки

public boolean onKeyDown(int keyCode, KeyEvent event){
    if (event.getRepeatCount() == 0) {
        if (keyCode == KeyEvent.KEYCODE_STEM_1) {
            // Do stuff
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_STEM_2) {
            // Do stuff
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_STEM_3) {
            // Do stuff
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

4: Отключите функцию смахивания, применив тему

<style name="AppTheme" parent="@android:style/Theme.DeviceDefault">
    <item name="android:windowSwipeToDismiss">false</item>
</style>

5: Перезапустите приложение при загрузке

Примечание:

Эта функция неудобна для пользователя, и Android Play Store не одобрит ее, если у вас нет очень веской причины.

person SANAT    schedule 07.06.2018
comment
Хороший! Хотя я не могу получить какие-либо данные от onKeyDown ? Любая идея, почему? - person Burol; 09.02.2020