2017-01-23 19 views
0

TL; DR Как сделать телефонный звонок при использовании Activity.startLockTask()?Выполнять вызовы в режиме Android Locktask

Я пытаюсь настроить ограниченную среду на устройстве Android, то есть обычно называемом «киоск-режим».

Официальная документация можно найти здесь: https://developer.android.com/work/cosu.html

Официальный способ сделать это предлагают использовать Activity.startLockTask.

Это работает нормально, пока вы не хотите запускать другие приложения из своего Activity, который находится в режиме startLockTask(). Любая работа, которая запускается, не должна запускаться в новом стеке задач, иначе система блокирует намерение запуска, то есть Intent.FLAG_ACTIVITY_NEW_TASK.

Некоторые приложения могут быть запущены, другие, похоже, неявно устанавливают этот флаг, но могут быть обработаны с помощью startActivityForResult(...), который, кажется, удаляет флаг NEW_TASK. Для приложений, которые все еще не работают, я мог бы написать свою собственную замену.

Настоящей проблемой является приложение вызова, которое обеспечивает выполнение нового стека задач. Запуск вызова инициировал вызов, не отображает активность вызова, но также помещает уведомление о вызове в строку состояния (которая недоступна при использовании startLockTask(). В отличие от других приложений приложение-вызов также является тем, т быть заменен на пользовательские приложения ...

DevicePolicyManager.html.setLockTaskPackages() не оказывает никакого влияния на это поведение.

ответ

0

вы пробовали это?

setLockTaskPackages(new ComponentName(this, DeviceAdminReceiver.class),new String[]{getPackageName(),"com.google.android.dialer"}); 
+0

Это не имеет значения. Проблема в том, что приложение/действие вызова заставляет новый стек задач, что именно предотвращает блокировку, таким образом скрывая пользовательский интерфейс вызова. – darken

1

Я попытался сделать намерение запуска вызова при заблокированном режиме, и это линия:

system_process E/ActivityManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{56ab302 u0 com.android.server.telecom/.components.UserCallActivity t155} 

Так что я добавить

setLockTaskPackages(<ComponentName>,new String[]{getPackageName(),"com.google.android.dialer","com.android.server.telecom"}); 

удалось получить дозвона из. Конечно, если я нажму кнопку «домой» или кнопку «Назад», нет способа вернуть дозвон ... последняя кнопка все еще заблокирована. Прием вызова работает отлично (все кнопки отключены)

+0

Что произойдет, если вы запустите звонок от дозвона? – darken

+0

Извините, мой намеренный вызов напрямую предоставил номер телефона. – hadifikri

+0

Нам нужно убедиться, что мы говорим об одном и том же. Существует активность вызова и активность дозвона. Активность вызова - это то, что начинается, когда вы нажимаете «вызов» от dailer. – darken