在Android Lollipop上使用NFC激活设备所有者

tag*_*y22 5 android nfc device-policy-manager android-5.0-lollipop

我正在尝试使用NFC在设备上设置设备所有者包.这里的Lollipop概述中提到了:

要部署和激活设备所有者,您必须在设备处于未设置状态时执行从编程应用程序到设备的NFC数据传输.此数据传输发送的信息与托管配置中描述的配置意图相同.

原因是一旦设置完毕,您就可以使用屏幕固定功能将设备锁定在自助服务终端模式.我已经能够通过在rooted设备上将device_owner.xml文件放到data/system /来手动设置设备所有者来测试此kiosk模式.

我之前从未使用过NFC,所以我可能会离开,但我根据这里的信息提出了以下NdefMessage :

Properties properties = new Properties();
properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.my.package");
properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SSID, "MyWiFiSSID");
properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PASSWORD, "WifiPassword");
properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "C9AD9E082457819B54CF76255A400375E4127112");
properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "https://dl.dropboxusercontent.com/u/xxx/app-release.apk");


ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(properties);
byte[] yourBytes = bos.toByteArray();
NdefRecord ndefRecord = NdefRecord.createMime(DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, yourBytes);
NdefMessage msg = new NdefMessage(ndefRecord);
Run Code Online (Sandbox Code Playgroud)

将此发送到我刚刚使用Lollipop预览恢复的设备会导致它显示:

哎呀!无法设置您的设备.联系您的IT部门.

它似乎正在认识到它正在接收一个提供请求的事实,但我不认为它正在读取我设置的属性,它不会尝试连接wifi.

Ran*_*ndy 4

看来您需要使用 来Properties.store正确创建 NdefRecord 的字节。

Properties properties = new Properties();
properties.setProperty(...);

ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream out = new ObjectOutputStream(bos);
properties.store(out, "");
byte[] bytes = bos.toByteArray();

NdefMessage msg = new NdefMessage(NdefRecord.createMime(DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes));
Run Code Online (Sandbox Code Playgroud)

目前,我在下载 APK 时遇到问题且校验和失败。完全不知道为什么。