在实现设备所有权后,我正在尝试实现一种方法来指示设备将任何给定的应用程序锁定到kiosk模式(或屏幕固定模式)。由于我拥有设备所有权,因此不会要求用户获得许可。
在开发者网站上,简要说明告诉我可以做我正在尝试的事情:
http://developer.android.com/about/versions/android-5.0.html#ScreenPinning
以编程方式:要以编程方式激活屏幕固定,请致电 你的应用程序中的startLockTask()。如果请求的应用程序不是设备 所有者,提示用户进行确认。 设备所有者应用可以 调用setLockTaskPackages()方法以使应用程序可以固定 没有用户确认步骤。
这表示作为设备所有者应用,我可以在没有用户确认的情况下锁定其他应用...但我不知道如何操作。
我已经能够将自己的应用程序置于固定模式。
任何帮助都将不胜感激。
答案 0 :(得分:11)
使用setLockTaskPackages()
指定哪些应用程序(通过其包名称)能够以编程方式固定而无需用户确认。
从您的设备所有者应用调用setLockTaskPackages()
(很可能是在DeviceAdminReceiver
的{{1}}方法中)。
因此,在您的所有者设备应用中,您将拥有以下内容:
onEnabled()
然后,在您的“com.foo.myapp”应用程序中,您将被自动调用以致:
mDPM.setLockTaskPackages("com.foo.myapp");
您的应用程序将立即进入固定模式,无需任何用户确认。
如果您没有startLockTask();
使用register
申请,申请将被固定,但用户必须先确认。
另请注意,当应用为setLockTaskPackages
且registered
时,其行为与手动不同:
setLockTaskPackages()
; 答案 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
}