簡體   English   中英

在應用程序處於自助服務終端模式時撥打電話

[英]Make phone call while app is in kiosk mode

我們正在開發一個 Android 應用程序,該應用程序旨在替換默認的 Android 撥號器並自行處理設備中正在進行的所有呼叫。 到目前為止,該應用程序按預期工作,我們能夠通過啟動ACTION_CALL意圖來處理來電和撥打電話。

但是,此應用程序旨在通過 Android 管理 API 在信息亭模式下運行。 每當我們觸發ACTION_CALL意圖時,信息亭模式都會阻止它,盡管應用程序設置為默認撥號程序。

經過一些調試,我們發現問題是,在啟動 Intent 時,在我們的應用程序收回請求控制權之前,系統會嘗試啟動com.android.server.telecom/.components.UserCallActivity 當我們的應用程序在 kiosk 模式下運行時,我們在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 管理 API 參數,例如persistentPreferredActivitiesdelegatedScopes 現在,我們認為最好的辦法是嘗試將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 管理 API,我們不知道這是否可行。 我們也嘗試過直接調用 DPC 包,但同樣沒有成功。

任何幫助將不勝感激。

首先感謝您在 Sof 中將這個問題作為一個新問題提出 - 正如所討論的那樣,因此其他開發人員可以做出貢獻,並且將來可能會幫助其他人。

我有一個關於你的解決方案和應用程序的問題......你為什么不選擇ConnectionService作為自我管理的應用程序,這樣你就不需要成為系統中的默認電話應用程序,你將能夠使用你自己的自定義 Ui而不是默認系統 inCallUi。

另外一點,安裝在完全托管和專用設備上的 DPC 被稱為設備所有者,設備所有者僅在第一次安裝設備時設置,而不是稍后(使用 Nfc 或 QrCode 配置)。

另一點是,“設備管理員”不是設備所有者,並且不再支持設備管理員,因此該解決方案也無濟於事。

我不熟悉 Android 管理 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"
}
]

請讓我知道這是否對你有用,謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM