Как начать новое действие из другого приложения в режиме киоска?

У меня есть два приложения, в которых оба включены в режиме киоска. В настоящее время я отправляю широковещательную передачу от одного к другому, который передает данные. Я хочу сообщить принимающему приложению, чтобы начать новое действие.

В большинстве случаев я мог бы использовать намерение.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); однако... Я не могу начать новую задачу в режиме киоска.

Вот что у меня есть в BroadReceiver (который, как я проверил, работает для других данных). Этот код пытается начать новую активность:

            Intent launchIntent = new Intent(Intent.ACTION_MAIN);
            launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this doesn't work in kiosk mode...
            launchIntent.setComponent(new ComponentName("my.package","my.package.myactivity"));
            try {
                if(launchIntent != null) {
                    context.getApplicationContext().startActivity(launchIntent);
                    Log.i(TAG, "Started activity");
                } else
                    Log.i(TAG, "Intent is null");
            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }

Моя ошибка перед добавлением флага:

Kiosk Mode: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

И после добавления флага:

E/ActivityManager(  470): Attempted Lock Task Mode violation

Возможно ли отправить контекст через широковещательный приемник, чтобы я мог начать желаемое действие, используя этот контекст? Может ли кто-нибудь предложить другой метод, кроме использования широковещательных передач для начала новой деятельности?


person Michael Kemp    schedule 10.01.2018    source источник


Ответы (1)


Примечание. В Android «ScreenPinning», «Kioskmode» и «Lock Task Mode» одинаковы.

из https://developer.android.com/about/versions/android-5.0.html#ScreenPinning

Once your app activates screen pinning, users cannot (...) 
access other apps (...) until your app exits the mode.

Вы должны временно отключить режим киоска с помощью stopLockTask() и снова включить его с помощью startLockTask()

Чтобы Android не запрашивал у пользователя перезапуск kioskmode, вам также необходимо реализовать https://developer.android.com/about/versions/android-5.0.html#DeviceOwner приложение

Вы можете найти много информации по этой теме на странице https://github.com/Tuong-Nguyen/Android/wiki/Research-114-Kiosk-Mode-Android-application

person k3b    schedule 10.01.2018