如何解决应用程序处于信息亭模式时拨打电话
我们正在开发一个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
添加到锁定任务白名单中,如下所示:
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 举报,一经查实,本站将立刻删除。