TL;DR 如何在使用时拨打电话Activity.startLockTask()
?
我正在尝试在 Android 设备上设置受限环境,即通常所说的“Kiosk 模式”。
官方文档可以在这里找到:https://developer.android.com/work/cosu.html https://developer.android.com/work/cosu.html
这样做的官方方法建议使用Activity.startLockTask https://developer.android.com/reference/android/app/Activity.html#startLockTask().
这工作正常,直到您想从您的内部启动其他应用程序Activity
这是在startLockTask()
模式。
任何启动的活动都不能在新的任务堆栈上启动,否则系统会阻止启动意图,即不启动Intent.FLAG_ACTIVITY_NEW_TASK
.
有些应用程序可以直接启动,其他应用程序似乎隐式设置此标志,但可以通过使用来解决startActivityForResult(...)
这似乎删除了NEW_TASK
旗帜。对于仍然无法工作的应用程序,我可以编写自己的替代品。
真正的问题是调用应用程序,它强制执行新的任务堆栈。触发呼叫发起呼叫,不显示呼叫活动,但也会在状态栏中放置呼叫通知(在使用时无法访问)startLockTask()
。
与其他应用程序相比,通话应用程序也是无法用自定义应用程序替代的......
DevicePolicyManager.html.setLockTaskPackages() https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setLockTaskPackages(android.content.ComponentName,%20java.lang.String%5B%5D)对此行为没有影响。
我尝试在锁定模式下启动呼叫意图,并弹出此行:
system_process E/ActivityManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{56ab302 u0 com.android.server.telecom/.components.UserCallActivity t155}
所以我添加
setLockTaskPackages(<ComponentName>,new String[]{getPackageName(),"com.google.android.dialer","com.android.server.telecom"});
设法取出拨号器。当然,如果我按主页按钮或后退按钮,则无法恢复拨号器......但最近的按钮仍然被锁定。接听电话工作正常(所有按钮均被禁用)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)