在启用任务锁定的情况下启动另一个应用程序

Start another app while task-locking is enabled

我用 this guide 作为设备所有者激活了我的应用程序。所以,我可以激活任务锁定。这非常接近我希望 Android 的行为方式。

是否可以在不禁用任务锁的情况下从设备拥有的应用程序启动一个或多个特定的第三方应用程序?

如果不能,是否可以通过一些变通方法实现?我正在考虑停用任务锁,启动另一个应用程序,然后远程为另一个应用程序激活任务锁。

提前致谢。

锁定的任务只能启动第三方活动,前提是第三方活动 launch flags 允许将它们启动到同一任务中。如果您尝试在新任务中启动 activity,它会向 logcat 打印一条警告,用户什么也看不到。

据我所知,没有通用的方法来锁定另一个任务。另一个任务必须设计为锁定自身以响应某些意图。

我知道我来不及参加派对了,但这是我为让它发挥作用所做的。

当您将应用设置为设备所有者时,您必须调用此方法:

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"};

它应该适合你。

在我的例子中,我的应用程序是一个需要锁定设备的企业应用程序,所以使用 kiosk 模式。但是我的应用程序需要拨打电话和 Google 地图应用程序。

不确定这是否是错误,但某些版本的 Android startActivity() 即使您正确调用 setLockTaskPackages() 也无法正常工作。这似乎是棒棒糖的问题。为了解决这个问题,我改用了 startActivityForResult。