TL; DR如何在使用Activity.startLockTask()
时拨打电话?
我试图在Android设备上设置受限制的环境,即通常称为" Kiosk-Mode"。
官方文件可在此处找到: https://developer.android.com/work/cosu.html
这样做的正式方法建议使用Activity.startLockTask。
此功能正常,直到您想要Activity
startLockTask()
模式下的其他应用启动。
任何启动的活动都不得在新的任务堆栈上启动,否则系统会阻止启动意图,即没有Intent.FLAG_ACTIVITY_NEW_TASK
。
有些应用程序可以启动,其他应用程序似乎隐式设置了这个标志,但是可以使用startActivityForResult(...)
解决方法,这似乎删除了NEW_TASK
标志。对于仍然无法工作的应用,我可以编写自己的替代品。
真正的问题是调用应用程序,它强制执行新的任务堆栈。触发呼叫会启动呼叫,不会显示呼叫活动,但也会在状态栏中发出呼叫通知(使用startLockTask()
时无法访问该状态栏。
与其他应用程序相比,呼叫应用程序也是一个无法用自定义应用程序替换的应用程序...
答案 0 :(得分:1)
我尝试在锁定模式下启动启动调用意图并弹出此行:
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"});
管理以拨出拨号器。当然,如果我按下主页按钮或后退按钮,则无法将拨号器返回...但最近的按钮仍然处于锁定状态。接收呼叫工作正常(所有按钮都被禁用)
答案 1 :(得分:0)
你试过这个吗?
setLockTaskPackages(new ComponentName(this, DeviceAdminReceiver.class),new String[]{getPackageName(),"com.google.android.dialer"});