在应用程序处于信息亭模式时拨打电话

Posted

技术标签:

【中文标题】在应用程序处于信息亭模式时拨打电话【英文标题】:Make phone call while app is in kiosk mode 【发布时间】:2021-02-14 11:19:32 【问题描述】:

我们正在开发一款 android 应用程序,该应用程序旨在替换默认的 Android 拨号器并自行处理设备中正在进行的所有呼叫。到目前为止,该应用程序按预期运行,我们可以通过启动ACTION_CALL 意图来处理来电和拨打电话。

但是,此应用旨在通过 Android Management API 在信息亭模式下运行。每当我们触发 ACTION_CALL 意图时,kiosk 模式都会阻止它,尽管应用程序被设置为默认拨号器。

经过一些调试,我们发现问题是,在启动 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=ActivityRecorde45f03 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 Management API,我们不知道这是否可行。我们也试过直接调用 DPC 包,但还是没有成功。

任何帮助将不胜感激。

【问题讨论】:

@potazzo : 可能重复的问题 => ***.com/questions/41806416/… 【参考方案1】:

首先感谢您在 Sof 中将这个问题作为一个新问题提出——正如在 Sof 中所讨论的那样,以便其他开发人员可以做出贡献,并且它可能会在未来帮助其他人。

我对您的解决方案和应用程序有疑问...您为什么不选择 ConnectionService 作为自我管理的应用程序,这样您就无需成为系统中的默认电话应用程序,您将能够使用您自己的自定义 Ui 而不是默认系统 inCallUi。

另外一点,安装在完全托管和专用设备上的 DPC 称为device owner,并且设备所有者仅在首次安装设备时设置(使用 Nfc 或 QrCode 配置)。

另外一点是,“设备管理员”不是设备所有者,device admin is no more supported 所以这个解决方案也无济于事。

我不熟悉 Android 管理 API,但只是找到这个: Link a kiosk app to additional apps.

"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"

]

如果这对你有用,请告诉我,谢谢

【讨论】:

以上是关于在应用程序处于信息亭模式时拨打电话的主要内容,如果未能解决你的问题,请参考以下文章

在拨打电话时获取用户的位置

Android拨打电话

OpenHarmony如何拨打电话

OpenHarmony如何拨打电话

OpenHarmony如何拨打电话

“你拨打的电话是空号”,是怎么回事?