17

在获得设备所有权后,我正在尝试实现一种方法来指示设备将任何给定的应用程序锁定到信息亭模式(或屏幕固定模式)。由于我拥有设备所有权,因此不会要求用户获得这样做的权限。

从开发人员网站,简要说明告诉我可以做我正在尝试的事情:

http://developer.android.com/about/versions/android-5.0.html#ScreenPinning

以编程方式:要以编程方式激活屏幕固定,请从您的应用程序调用 startLockTask()。如果请求的应用程序不是设备所有者,则会提示用户确认。设备所有者应用程序可以调用 setLockTaskPackages() 方法以使应用程序无需用户确认步骤即可固定。

这表明作为设备所有者应用程序,我可以在没有用户确认的情况下固定其他应用程序......但我不知道如何。

我已经能够将自己的应用程序置于固定模式。

任何帮助,将不胜感激。

4

3 回答 3

14

用于指定哪些应用程序(通过它们的setLockTaskPackages()包名称)将能够以编程方式固定而无需用户确认setLockTaskPackages()是从您的设备所有者应用程序调用的(很可能是在您DeviceAdminReceiveronEnabled()方法中)。

因此,在您的所有者设备应用程序中,您将拥有以下内容:

mDPM.setLockTaskPackages("com.foo.myapp");

然后,在您的“com.foo.myapp”应用程序中,您将被自动调用:

startLockTask(); 

您的应用程序将立即进入 Pinning 模式,无需任何用户确认。

如果您不首先register使用 应用程序setLockTaskPackages,则应用程序将被固定,但用户必须先确认。

另请注意,当应用程序registered使用 时setLockTaskPackages(),它的行为与手动 pin不同:

  • 用户无法通过长按Back + Recent Apps手动取消固定应用程序。您必须以编程方式取消固定您的应用程序stopLockTask()
  • “主页”和“最近的应用程序”按钮不可见(不显示)
  • 当应用程序被取消固定时(通过 stopLockTask()),用户将直接返回主页:即使设置了 Keyguard(模式、代码或任何 Keyguard 屏幕),也不会显示屏幕锁定。
于 2015-01-29T11:03:11.067 回答
3

我没有足够的评论声誉,只是指出对于带有物理按钮的设备(例如@chairman 提到的三星 Galaxy Tab A),管理应用程序强制取消固定的一种方法是在您的 DeviceAdminReceiver 类中实现下列的:

@Override public void onLockTaskModeExiting(上下文上下文,意图)

因此,如果您的用户想要取消固定,您可以随时重新固定您的应用;)

于 2016-02-17T08:05:27.193 回答
0

这是一个可以帮助您前进的代码片段:

DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);

if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
    // Device owner
    String[] packages = {this.getPackageName()};
    myDevicePolicyManager.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
    // Not a device owner - prompt user or show error
}

if (myDevicePolicyManager.isLockTaskPermitted(this.getPackageName())) {
    // Lock allowed
    startLockTask();
} else {
    // Lock not allowed - show error or something useful here
}
于 2015-01-29T00:14:05.803 回答