这个StackOverflow问题探讨了如何在Android L开发者预览版中启用设备所有者应用程序,以及信息亭模式。由于该方法需要Android的用户调试版本,将设备植根并将XML文件复制到根文件系统中,因此它似乎不适合在公司内部大规模部署单个功能的Android设备。
设备拥有者应用如何在生产的Android L设备上安装?
这个StackOverflow问题探讨了如何在Android L开发者预览版中启用设备所有者应用程序,以及信息亭模式。由于该方法需要Android的用户调试版本,将设备植根并将XML文件复制到根文件系统中,因此它似乎不适合在公司内部大规模部署单个功能的Android设备。
设备拥有者应用如何在生产的Android L设备上安装?
Answers:
(编辑:经过更多测试后更新)
检查最新文档。
此功能似乎现在称为“屏幕固定”,并且该应用程序不必是设备所有者。如果未设置设备所有者,则会提示用户接受。但是下面提到的供自助服务终端使用的方式存在一些问题。
有两种方法可以激活屏幕固定:
手动:用户可以在“设置”>“安全性”>“屏幕固定”中启用屏幕固定,并通过触摸“最近”屏幕中的绿色“固定”图标来选择要固定的任务。编程方式:要以编程方式激活屏幕固定,请从您的应用中调用startLockTask()。如果发出请求的应用不是设备所有者,则会提示用户进行确认。设备所有者的应用程序可以调用setLockTaskPackages()方法以使应用程序可固定,而无需用户确认步骤。
如果您以编程方式(非设备所有者的应用程序)或使用最近使用的设备在设备上激活屏幕固定,则会出现以下现象:
出现一个对话框,询问用户是否要启用屏幕固定以及是否需要密码才能退出。如果他们按是,则状态栏和通知消失,返回,主页和“最近”按钮不会消失。轻按家中或最近来的东西,会出现烤面包,通知用户如何退出屏幕固定。
然后,用户可以按住并保持最新状态以退出屏幕固定。如果用户选择要求输入密码,他们将被直接踢向锁定屏幕。此行为意味着它不适用于信息亭imo。由于信息亭用户最终很容易看到锁定屏幕。
为了获得正确的信息亭模式,我们需要设置设备所有者。Google的文档说您需要使用NFC做到这一点:
要部署和激活设备所有者,必须在设备处于未配置状态时执行从编程应用到设备的NFC数据传输。
使用NFC进行此操作似乎有些复杂(如果设备没有NFC,该怎么办?)。我尚未对此进行调查,因此,如果有人可以提供信息,您如何通过NFC设置设备所有者?现在,这成为您问题的重点。(即在非root用户的设备上设置设备所有者)
但是,要确认行为是否符合预期,如果您对设备进行了root操作,则可以按照我在这里提到的Google先前的说明(添加device_owner.xml)来设置设备所有者。
现在,您可以正确锁定该应用程序,没有对话框可供用户接受,启用此功能后,“最近记录”和“主页”按钮将消失,并且除非您的应用程序自行解锁,否则用户无法离开该应用程序。正确的信息亭模式。我已经在Nexus 7 2013上使用最新的Lollipop版本进行了测试。
以下代码段打开了锁:
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
Log.d(TAG, "isDeviceOwnerApp: YES");
String[] packages = {this.getPackageName()};
mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
Log.d(TAG, "isDeviceOwnerApp: NO");
}
if (mDPM.isLockTaskPermitted(this.getPackageName())) {
Log.d(TAG, "isLockTaskPermitted: ALLOWED");
startLockTask();
} else {
Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}
我无法评论一个有点麻烦的答案,但可以dpm
作为设置设备所有者的tagy22答案的补充。更多细节在这里。
dpm
如果在设备中设置了帐户(例如Google帐户),则无法完成工作。