簡體   English   中英

在Android Lollipop上使用NFC激活設備所有者

[英]Activate a device owner using NFC on Android 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);

將此發送到我剛剛使用Lollipop預覽恢復的設備會導致它顯示:

哎呀! 無法設置您的設備。 聯系您的IT部門。

它似乎正在認識到它正在接收一個提供請求的事實,但我不認為它正在讀取我設置的屬性,它不會嘗試連接wifi。

您似乎需要使用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));

目前,我遇到了下載我的APK和校驗和失敗的問題。 完全不確定為什么。

我一直在努力讓這個也適用於NFC。 我在我的Nexus 4(KitKat)上安裝了一個簡單的應用程序,其中包含一項活動:

@Override
protected void onResume() {
    super.onResume();
    try {
        Properties properties = new Properties();
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.deviceowner.app");
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "https://docs.google.com/uc?export=download&id=........");
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "6ee735dfb8090ab1862fecce430864e21a0e37");
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SSID, "wlan");
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PASSWORD, "XXXXXX");
        properties.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, "WPA2");

        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);
        nfcAdapter.setNdefPushMessage(msg, this);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我用Lollipop預覽圖像(razor-lpx13d-preview-ae4f461f.tgz)刷了我的Nexus 7,當Nexus 7未配置時(無設置 - 閃爍后新鮮)獲得了與Nexus 4的NFC撞擊相同的錯誤消息:

哎呀! 無法設置您的設備。 聯系您的IT部門。

然后我嘗試了相同的事情,但這次是在Nexus 7上運行初始設備設置(到我可以看到主屏幕的那一點)。 這次我收到了消息

哎呀! 此設備已設置完畢

但這一次,我能夠看到一些日志,因為我能夠在Nexus 7上設置USB調試:

10-22 10:31:29.947    2610-2610/? D/NfcService﹕ LLCP Activation message
10-22 10:31:29.947    2610-2610/? I/NfcP2pLinkManager﹕ LLCP activated
10-22 10:31:29.947    2610-2610/? D/NfcP2pLinkManager﹕ onP2pInRange()
10-22 10:31:29.954    2610-2610/? W/AudioTrack﹕ AUDIO_OUTPUT_FLAG_FAST denied by client
10-22 10:31:29.962      184-547/? D/audio_hw_primary﹕ select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
10-22 10:31:29.962      184-547/? D/ACDB-LOADER﹕ ACDB -> send_afe_cal
10-22 10:31:29.962      184-547/? D/audio_hw_primary﹕ enable_snd_device: snd_device(2: speaker)
10-22 10:31:29.974      184-547/? D/audio_hw_primary﹕ enable_audio_route: apply and update mixer path: low-latency-playback
10-22 10:31:29.981    2610-2610/? D/NfcP2pLinkManager﹕ Last registered callback is not running in the foreground.
10-22 10:31:29.987    2610-2610/? D/NfcP2pLinkManager﹕ Disabling default Beam behavior
10-22 10:31:29.987    2610-2610/? D/NfcP2pLinkManager﹕ mMessageToSend = null
10-22 10:31:29.987    2610-2610/? D/NfcP2pLinkManager﹕ mUrisToSend = null
10-22 10:31:29.996    2610-2610/? D/NfcP2pLinkManager﹕ Took 48 to get first LLCP PDU
10-22 10:31:30.599    3224-3224/? I/wpa_supplicant﹕ wlan0: CTRL-EVENT-SCAN-STARTED
10-22 10:31:31.741    2610-2610/? D/NfcP2pLinkManager﹕ onP2pReceiveComplete()
10-22 10:31:31.751    2610-2610/? D/NfcService﹕ mock NDEF tag, starting corresponding activity
10-22 10:31:31.751    2610-2610/? D/NfcService﹕ TAG: Tech [android.nfc.tech.Ndef]
10-22 10:31:31.757    2610-3275/? W/AudioTrack﹕ AUDIO_OUTPUT_FLAG_FAST denied by client
10-22 10:31:31.770     549-2765/? I/ActivityManager﹕ START u0 {flg=0x10008000 cmp=com.android.nfc/.NfcRootActivity (has extras)} from uid 1027 on display 0
10-22 10:31:31.795    7237-7237/? D/ManagedProvisioning﹕ Device owner provisioning activity ONDESTROY
10-22 10:31:31.827    2610-3275/? W/AudioTrack﹕ AUDIO_OUTPUT_FLAG_FAST denied by client
10-22 10:31:31.848     549-2335/? I/ActivityManager﹕ START u0 {act=android.nfc.action.NDEF_DISCOVERED typ=application/com.android.managedprovisioning cmp=com.android.managedprovisioning/.DeviceOwnerProvisioningActivity (has extras)} from uid 1027 on display 0
10-22 10:31:31.886    7237-7237/? D/ManagedProvisioning﹕ Device owner provisioning activity ONCREATE
10-22 10:31:31.887    7237-7237/? E/ManagedProvisioning﹕ Device already provisioned.
10-22 10:31:31.903    7237-7237/? D/ManagedProvisioning﹕ Device owner provisioning activity ONRESUME
10-22 10:31:32.011      549-621/? I/ActivityManager﹕ Displayed com.android.managedprovisioning/.DeviceOwnerProvisioningActivity: +149ms (total +200ms)
10-22 10:31:32.955    2610-2610/? D/NfcService﹕ LLCP Link Deactivated message. Restart polling loop.
10-22 10:31:32.955    2610-2610/? I/NfcP2pLinkManager﹕ LLCP deactivated.
10-22 10:31:32.955    2610-2610/? D/NfcP2pLinkManager﹕ Debounce timeout
10-22 10:31:32.955    2610-2610/? D/NfcP2pLinkManager﹕ onP2pOutOfRange()

因此,設備所有者NFC碰撞似乎只能發生在未設置的設備上。 我感謝這不回答你的問題,但日志輸出可能會有所幫助。 掌握DeviceOwnerProvisioningActivity的源代碼肯定會有所幫助。

您應該手動輸入WiFi參數。 在Android 5.1中有一個錯誤已得到糾正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM