【问题标题】:Start another app while task-locking is enabled启用任务锁定时启动另一个应用程序
【发布时间】:2015-11-20 17:38:46
【问题描述】:
我使用this guide 将我的应用程序激活为设备所有者。所以,我可以激活任务锁定。这非常接近我希望 Android 的行为方式。
是否可以从设备拥有的应用程序中启动一个或多个特定的第三方应用程序而不停用任务锁定?
如果没有,是否有可能通过一些解决方法?我正在考虑停用任务锁,启动另一个应用程序,然后远程激活另一个应用程序的任务锁。
提前谢谢你。
【问题讨论】:
标签:
android
android-5.0-lollipop
kiosk-mode
【解决方案1】:
就我而言,我的应用程序是一个企业应用程序,需要锁定设备,因此使用 kiosk 模式。但我的应用需要拨打电话和谷歌地图应用。
不确定这是否是错误,但即使您正确调用 setLockTaskPackages(),某些版本的 Android startActivity() 也无法工作。这似乎是棒棒糖的问题。为了解决问题,我改用 startActivityForResult。
【解决方案2】:
如果他们的launch flags 允许他们被启动到相同的任务,锁定的任务只能启动第三方活动。如果您尝试在新任务中启动活动,它会向 logcat 打印警告,而用户将什么也看不到。
AFAIK,没有通用的方法来锁定另一个任务。另一个任务必须设计为锁定自身以响应某些意图。
【解决方案3】:
我知道我参加派对为时已晚,但这是我所做的让它为我工作。
当您将应用设置为设备所有者时,您必须调用此方法:
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
// get this app package name
ComponentName mDPM = new ComponentName(this, DeviceAdmin.class);
Utility.writeLogs(this, getString(R.string.info), "Trying to start lock task...");
if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
// get this app package name
String[] packages = {this.getPackageName()};
// mDPM is the admin package, and allow the specified packages to lock task
myDevicePolicyManager.setLockTaskPackages(mDPM, packages);
startLockTask();
} else {
Toast.makeText(getApplicationContext(), R.string.not_owner, Toast.LENGTH_LONG).show();
}
只需在
中添加您要允许从您的应用程序中打开的应用程序的包名称
String[] packages = {this.getPackageName(), "Package names to be allowed"};
它应该适合你。