Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式固定第三方应用程序的屏幕_Android_Android 5.0 Lollipop_Device Policy Manager_Device Owner_Android Screen Pinning - Fatal编程技术网

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

Android 以编程方式固定第三方应用程序的屏幕,android,android-5.0-lollipop,device-policy-manager,device-owner,android-screen-pinning,Android,Android 5.0 Lollipop,Device Policy Manager,Device Owner,Android Screen Pinning,在获得设备所有权之后,我尝试实现一种方法,指示设备将任何给定的应用程序锁定到kiosk模式(或屏幕锁定模式)。由于我拥有设备所有权,因此不会要求用户获得这样做的权限 从开发者网站上,简短的描述告诉我可以做我正在尝试的事情: 编程方式:要以编程方式激活屏幕固定,请调用 应用程序中的startLockTask()。如果请求的应用程序不是设备 所有者,则提示用户进行确认设备所有者应用程序可以 调用setLockTaskPackages()方法以使应用程序可锁定 没有用户确认步骤。 这表明作为设备所有

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

从开发者网站上,简短的描述告诉我可以做我正在尝试的事情:

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

这表明作为设备所有者应用,我可以在没有用户确认的情况下锁定其他应用。。。但我不知道该怎么做

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


如果您有任何帮助,我们将不胜感激。

这里有一段代码片段,可以帮助您:

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
}

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

因此,在您的owner设备应用程序中,您将有如下内容:

mDPM.setLockTaskPackages("com.foo.myapp");
然后,在您的“com.foo.myapp”应用程序中,您将被自动调整为调用:

startLockTask(); 
您的应用程序将立即进入锁定模式,无需任何用户确认

如果您没有首先
setLockTaskPackages
注册
您的应用程序,应用程序将被锁定,但用户必须首先确认

还请注意,当应用程序使用
setLockTaskPackages()
注册时,它具有一些与手动pin不同的行为:

  • 用户无法通过长按Back+最近的应用程序手动取消绑定应用程序。您必须使用
    stopLockTask()
    以编程方式解除应用程序的锁定
  • “主页”和“最近的应用”按钮不可见(不显示)
  • 当应用程序解除锁定(通过stopLockTask())时,用户将直接返回主页:即使设置了键盘锁(模式、代码或任何键盘锁屏幕),也不会显示屏幕锁
我没有足够的声誉发表评论,我只想指出,对于带有物理按钮的设备(如@主席提到的三星Galaxy Tab a),管理应用程序强制取消钉扎的一种方法是在DeviceAdminReceiver类中实现以下内容:

@重写公共void onLockTaskModeExiting(上下文、意图 (意图)


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

这样我们只能锁定自己的应用程序,但正如kash解释的,他想锁定其他应用程序,是否可以使用具有设备所有者权限的DevicePolicyManager?是否可以从我们的应用程序锁定其他应用程序。正如我们所知,主页和最近的按钮将不可见。那么,如何才能连接到其他应用程序来锁定它。基本上,要求能够在kiosk/pinted模式下为多个应用程序使用设备。@khubaib您基本上需要在设备所有者中添加应用程序的包名。然后从应用程序中调用startLockTask()。这是我到目前为止找到的唯一方法。在哪里可以找到DeviceAdminSample.class?您要锁定的应用是您的还是第三方应用?@Hartok,我要锁定的应用是第三方应用。我们可以使用setLockTaskPackages方法锁定其他应用吗?@FlorentDupont,您提供的应用程序(例如com.foo.myapp)是否必须是您发布的应用程序,并且必须授权屏幕固定?愤怒的小鸟说,是不是我可以锁起来。。。com.rovio.angrybirds?@suniljain:不,你不能用setLockTaskPackages锁定另一个应用程序。您必须使用其他应用程序的
Activity.startocktask()
来执行此操作@是的,在这个例子中,
com.foo.myapp
必须由我发布。你不能以编程方式锁定另一个你不拥有的应用程序。我就这个问题写了一篇完整的文章。此处提供:。我希望它能回答你的问题。@FlorentDupont我写了一个拥有者和管理员的应用程序,我可以在没有用户确认的情况下成功锁定该应用程序,但用户仍然能够取消锁定该应用程序长时间按后退+最近的应用程序,按钮仍然存在,因为它们是物理按钮,我的设备是三星Galaxy Tab a。可能是三星的错误实现。