Режим киоска в NativeScript для Android-приложения

С последних нескольких дней я пытаюсь реализовать режим киоска (заблокированное приложение) в NativeScript с Angular для приложения Android.

Я пробовал это напрямую, но не смог обработать все кнопки в Android, такие как кнопки «Домой» и «Недавние приложения». Я могу работать с кнопками «Назад» и «Увеличение и уменьшение громкости».

Другой способ, который я пробовал, - это создать свой собственный плагин с использованием Android Native, но мне это не удалось.

В Android Native есть два варианта режима киоска. Один из них - закрепление экрана (программно), а другой - использование COSU в Android (что не является моим требованием, потому что я не могу установить приложение как владелец устройства для 1000 устройств).

Итак, может ли кто-нибудь поделиться своими знаниями об использовании Screen Pinning в Android и создании плагина для этого в NativeScript и пример кода в NativeScript.

Заранее спасибо!

Ниже приведен мой Java-код для Android Native для реализации закрепления экрана.

package org.nativescript.sdoddapaneni.kioskmodeplugin;

import android.app.ActivityManager;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class LoginActivity extends AppCompatActivity {

    private Button pinAppBtn;
    private Button unpinAppBtn;
    private ActivityManager am;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        pinAppBtn = (Button) findViewById(R.id.pin_app);
        unpinAppBtn = (Button) findViewById(R.id.unpin_app);

        am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

        pinAppBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pin();
            }
        });
        unpinAppBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unpin();
            }
        });

    }

    public void unpin() {
        if (am.isInLockTaskMode()) {
            stopLockTask();
        } else {
            Toast.makeText(this, "Application already unpinned !", Toast.LENGTH_SHORT).show();
        }
    }

    public void pin() {
        startLockTask();
    }
}

person Sanketh    schedule 26.10.2018    source источник
comment
Узнайте, как заставить приложение-пусковую установку перехватывать кнопку «Домой». Это первый шаг. Это непростая задача, и вам нужно провести много исследований.   -  person Richard Le Mesurier    schedule 28.10.2018
comment
Я хочу заблокировать приложение программно одним нажатием кнопки без каких-либо изменений в устройстве, таких как рутирование или создание приложения для запуска или владельца устройства. Я хочу, чтобы это было сделано с помощью NativeScript. Я не смог найти в Интернете полезных примеров или информации по этому поводу.   -  person Sanketh    schedule 29.10.2018
comment
Я сомневаюсь, что NativeScript может это сделать без плагина, который реализует это, как указано выше.   -  person Richard Le Mesurier    schedule 29.10.2018
comment
Плагин в виде портативного / многоразового модуля. У вас всегда есть 100% доступ к нативным API даже в рамках проекта.   -  person Manoj    schedule 29.10.2018
comment
Я думаю, что режим киоска - это нечто иное, и хотя NativeScript имеет доступ к собственным API-интерфейсам, я не думаю, что для этого есть прямой подход.   -  person Sanketh    schedule 29.10.2018
comment
@RichardLeMesurier Как вы думаете, плагин NativeScript может переопределить onCreate (), передав необходимые параметры, такие как android.io.Bundle, и получив экземпляр?   -  person Sanketh    schedule 29.10.2018
comment
@Manoj Да, вполне может быть плагин, который может это сделать. Он будет написан с использованием собственного кода Android. Чтобы реализовать такой плагин самостоятельно, нужно было бы узнать, как создать приложение-пусковую установку (или реализовать закрепление) - отсюда и мой совет OP. Другими словами, я не знаю простого метода создания киоск-приложения.   -  person Richard Le Mesurier    schedule 29.10.2018
comment
@Sanketh Да, я думаю, что в плагин можно добавить любой код. Хотя у меня нет опыта работы с NativeScript, я работал с плагинами Cordova и React Native, которые содержат код Android, и они могут включать любой уровень нативной java, который мне нужен. Я хочу сказать, что вы не можете прослушивать кнопку HOME, не создав приложение в стиле пусковой установки, так что это должно быть место для начала поиска.   -  person Richard Le Mesurier    schedule 29.10.2018
comment
@RichardLeMesurier Но в приложении в стиле пусковой установки у нас есть настройки в верхнем ящике уведомлений, который будет автоматически перемещать пользователя к настройкам, и, следовательно, пользователь может вносить изменения в настройки. Так что это не будет работать как киоск. Я думаю, мне нужно провести много исследований по этому поводу.   -  person Sanketh    schedule 29.10.2018
comment
@Sanketh Да, это одна из проблем того времени. Но вы сказали, что не хотите использовать COSU. Посылаю вам пару примеров, которые я нашел.   -  person Richard Le Mesurier    schedule 29.10.2018
comment
Вот правильный способ с помощью COSU   -  person Richard Le Mesurier    schedule 29.10.2018
comment
Вот более старый способ с помощью различных хаков и таймеров, чтобы ваше приложение оставалось впереди   -  person Richard Le Mesurier    schedule 29.10.2018
comment
Лично у меня в последний раз было это требование, я выбрал одно из сторонних решений, например MobiLock (я думаю).   -  person Richard Le Mesurier    schedule 29.10.2018
comment
COSU - это то, что нам нужно, чтобы сделать наше приложение владельцем устройства с помощью adb или программно (без настройки учетной записи на устройстве), что не будет работать в моем случае, поскольку я не могу сделать это на всех пользовательских устройствах.   -  person Sanketh    schedule 29.10.2018
comment
MobiLock будет моим последним приоритетом там, где у них свои цены и прочее. Я хочу сделать что-то вроде режима киоска, который включается после входа пользователя в систему и отключается после выхода из системы. Я думаю, что Screen Pinning - лучший способ сделать это. Но стоит посмотреть, как это сделать в виде плагина в NativeScript.   -  person Sanketh    schedule 29.10.2018


Ответы (1)


Вот как вы расширите действие по умолчанию в NativeScript. К вашему сведению, с v4.x NativeScript все еще использует activity, начиная с 5.x они представил AppCompatActivity, выпуск которого ожидается через несколько дней.

person Manoj    schedule 27.10.2018