2014-10-20 114 views
5

我試圖在使用NFC的設備上設置設備所有者軟件包。將在棒棒堂概述here提到:在Android上使用NFC激活設備所有者棒棒糖

部署和激活設備所有者,您必須在設備處於 其未接通的狀態下執行從編程應用的NFC數據傳輸 到設備。此數據傳輸發送與Managed provisioning中所述的供應意圖相同的信息 。

原因是一旦設置了這個設置,您可以使用屏幕鎖定功能將設備鎖定在自助服務終端模式下。我已經能夠通過將device_owner.xml文件放置到具有根設備上的data/system /來手動設置設備所有者來測試此Kiosk模式。

我從來沒有使用NFC之前,所以我可能是遙遠,但我有以下NdefMessage想出了基於該信息here

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); 

發送這一個設備,我剛纔用棒棒糖恢復預覽使其顯示:

糟糕!無法設置您的設備。請聯繫您的IT部門。

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

回答

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)); 

目前,我遇到了下載我的APK和校驗和失敗的問題。完全不知道爲什麼。

+0

我發佈了自己關於校驗和失敗的問題:http://stackoverflow.com/questions/26509770/provisioning-in-android-lollipop – Randy 2014-10-22 14:23:01

1

我一直試圖讓這個工作通過NFC。我安裝了一個簡單的應用程序在我的Nexus 4(奇巧)與活動:

@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(); 
    } 
} 

我亮出我的Nexus 7閃現與棒棒堂預覽圖像(剃刀lpx13d預覽-ae4f461f.tgz),並賦予它一個NFC當Nexus 7未設置時(無設置 - 閃爍後新鮮)與Nexus 4碰撞並得到相同的錯誤信息:

糟糕!無法設置您的設備。請聯繫您的IT部門。

然後,我嘗試了同樣的事情,但這次運行了Nexus 7上的初始設備設置後(我可以看到主屏幕)。這一次我得到了消息

糟糕!此裝置已建立

但是這一次,我能看到一些日誌記錄,因爲我是能夠安裝USB調試上的Nexus 7:

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的源代碼肯定會有所幫助。

+0

我得到這個與@Randy發佈的答案一起工作 - 但我現在堅持在同一點:'由於校驗和錯誤,無法使用管理應用程序。聯繫您的IT部門# – stevev 2014-10-22 21:28:10

+0

您是否能夠成功配置wifi設置?當我這樣做時,它會在那裏說「連接到Wi-Fi ......」,但從不連接。 – Randy 2014-10-23 13:44:36

+0

不,我刪除了wifi設置,在第一個設置屏幕中輸入了它們,然後做了NFC碰撞。那是當我得到校驗和錯誤。你有沒有更進一步呢? – stevev 2014-10-23 16:49:33

1

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

相關問題