微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决应用程序处于信息亭模式时拨打电话

我们正在开发一个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参数,例如persistentPreferredActivitiesdelegatedScopes。目前,我们认为最好的选择是尝试将com.android.server.telecom添加到锁定任务白名单中,如下所示:

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程序包,但再次失败。

任何帮助将不胜感激。

解决方法

首先,感谢您像Sof中所讨论的那样,将这个问题作为一个新问题提出来,以便其他开发人员可以做出贡献,并可能对其他人有所帮助。

我对您的解决方案和应用有疑问...您为什么不选择ConnectionService作为自我管理的应用,因此您将避免成为系统中的默认电话应用,能够使用您自己的自定义Ui代替默认系统inCallUi。

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

还有一点是,“设备管理员”不是设备所有者,并且device admin is no more supported也不起作用。

我不熟悉Android Managment 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",{
"packageName": "com.android.server.telecom","defaultPermissionPolicy": "GRANT"
}
]

请告诉我这是否对您有用,谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。