屏幕以编程方式固定第三方应用

时间:2015-01-29 00:07:00

标签: android android-5.0-lollipop device-policy-manager device-owner android-screen-pinning

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

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

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

  

以编程方式:要以编程方式激活屏幕固定,请致电   你的应用程序中的startLockTask()。如果请求的应用程序不是设备   所有者,提示用户进行确认。 设备所有者应用可以   调用setLockTaskPackages()方法以使应用程序可以固定   没有用户确认步骤。

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

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:11)

使用setLockTaskPackages()指定哪些应用程序(通过其包名称)能够以编程方式固定而无需用户确认。 从您的设备所有者应用调用setLockTaskPackages()(很可能是在DeviceAdminReceiver的{​​{1}}方法中)。

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

onEnabled()

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

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

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

如果您没有startLockTask(); 使用register申请,申请将被固定,但用户必须先确认。

另请注意,当应用为setLockTaskPackagesregistered时,其行为与手动不同:

  • 用户无法通过长按返回 + 最近的应用来手动取消固定应用程序。您必须使用setLockTaskPackages();
  • 以编程方式取消固定您的应用
  • “主页”和“最近的应用”按钮不可见(不显示)
  • 当取消固定应用程序时(通过stopLockTask()),用户将直接返回主页:即使设置了键盘锁(图案,代码或任何键盘锁定屏幕),也不会显示屏幕锁定。

答案 1 :(得分:3)

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

  

@Override public void onLockTaskModeExiting(Context context,Intent   意图)

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

答案 2 :(得分: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
}