Телефонный звонок, когда приложение находится в режиме киоска

Мы работаем над приложением для Android, которое призвано заменить программу набора номера Android по умолчанию и самостоятельно обрабатывать все вызовы, происходящие на устройстве. Пока что приложение работает должным образом, и мы можем как обрабатывать входящие звонки, так и совершать звонки, запуская ACTION_CALL намерения.

Однако это приложение предназначено для работы в режиме киоска через Android Management API. Каждый раз, когда мы запускаем намерение ACTION_CALL, режим киоска блокирует его, хотя приложение установлено как номеронабиратель по умолчанию.

После некоторой отладки мы обнаружили, что проблема заключается в том, что при запуске намерения, прежде чем наше приложение вернет контроль над запросом, система пытается запустить com.android.server.telecom/.components.UserCallActivity. Поскольку наше приложение работает в режиме киоска, мы получили следующую ошибку в logcat:

10-25 20:29:44.560  1186  3677 E ActivityTaskManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{e45f03 u0 com.android.server.telecom/.components.UserCallActivity t24}

У нас есть разные способы обхода, но, похоже, ни один из них не работает. Мы испортили параметры Android Managment API, такие как persistentPreferredActivities или delegatedScopes. Сейчас мы думаем, что лучше всего попытаться добавить com.android.server.telecom в белый список locktask примерно так:

var dpm = (DevicePolicyManager)MainActivity.GetSystemService(Context.DevicePolicyService);
if (dpm.IsDeviceOwnerApp(MainActivity.PackageName)){
    dpm.SetLockTaskPackages(XXX, new[] { MainActivity.PackageName, "com.android.server.telecom"})
}

но при таком подходе необходимо установить наше приложение в качестве администратора устройства, чего мы не знаем, возможно ли это, пока мы используем Android Management API. Мы также пытались напрямую вызвать пакет DPC, но снова безуспешно.

Любая помощь будет оценена по достоинству.


comment
@potazzo: возможный дублированный вопрос = ›https://stackoverflow.com/questions/41806416/perform-calls-in-android-locktask-mode   -  person issamux    schedule 04.11.2020


Ответы (1)


Прежде всего, спасибо за то, что задали этот вопрос как новый вопрос - как обсуждалось - в Sof, чтобы другие разработчики могли внести свой вклад, и он может помочь другим в будущем.

У меня вопрос о вашем решении и приложении ... почему бы вам не выбрать ConnectionService как самоуправляемое приложение, так что вам не придется быть приложением телефона по умолчанию в системе, и вы сможете использовать свой собственный пользовательский интерфейс вместо системы по умолчанию inCallUi.

С другой стороны, DPC, установленный на полностью управляемых и выделенных устройствах, называется владельцем устройства и владелец устройства устанавливается только при первой установке устройства, а не позже (с использованием Nfc или QrCode).

Другой момент: администратор устройства не является владельцем устройства, а администратор устройства больше не является поддерживается, так что и это решение не поможет.

Я не знаком с Android Managment API, но просто нашел это: Свяжите киоск-приложение в дополнительные приложения.

"applications": [
{
"packageName": "com.example.app",
"installType": "KIOSK",
"defaultPermissionPolicy": "GRANT"
},
{
"packageName": "com.google.android.dialer",
"installType": "FORCE_INSTALLED",
"defaultPermissionPolicy": "GRANT"
},
{
"packageName": "com.android.server.telecom",
"installType": "FORCE_INSTALLED",
"defaultPermissionPolicy": "GRANT"
}
]

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

person issamux    schedule 03.11.2020