2014-12-30 115 views
0

我已經創建了我自己的QX10客戶端應用程序,剛剛發佈存儲。 (可在Windows Phone商店購買:http://www.windowsphone.com/en-us/store/app/nc-qx10/1c8d71da-0e4b-43cd-a5c2-020a072419d3,它在此處開放源代碼:https://github.com/nantcom/SonyCameraSDK {尚未同步,仍在清理代碼...}),我的下一步是從NFC獲取相機密碼。閱讀索尼QX10 NFC標籤

經過幾次試驗後,我在使用NdefLibrary讀取嵌入在我的QX10上的NFC標籤方面取得了小小的成功。這裏是什麼,我可以從我的QX10得到:

Mime類型:

application/x-sony-pmm 

有效載荷:

\0\0\0\0DIRECT-qdQ0:DSC-QX10\0\*********\0\n\0��\0\0\n\0\0����ɇ\v\0\0\0�@/\0\n\0\0�A\nDmsRmtDesc\0\0 

我可以看到我的QX10的SSID和與屏蔽的位置* ***是我的QX10密碼,所以這是從QX10獲取密碼的一種可能方式。

但是,有效負載似乎有一些特定的格式,我一直在尋找約2小時。我可以簡單地使用substring來獲取密碼,但它似乎並不可靠,因爲它可能與其他相機不同。

是否有任何公佈的有關此Ndef記錄類型的規範,所以我可以可靠地從它讀取SSID /密碼?

回答

0

不錯的應用程序!雖然我不能直接幫助你,我用從蒂博米歇爾一些代碼(https://github.com/ThibaudM/timelapse-sony),以獲得我的應用程序的Android NFC連接工作:

下面是它處理從有效載荷獲取密碼的Java方法:

private static Pair<String, String> decodeSonyPPMMessage(NdefRecord ndefRecord) { 

     if(!SONY_MIME_TYPE.equals(new String(ndefRecord.getType()))) { 
      return null; 
     } 

     try { 
      byte[] payload = ndefRecord.getPayload(); 
      Log.v("pay",String.valueOf(payload)); 
      int ssidBytesStart = 8; 
      int ssidLength = payload[ssidBytesStart]; 

      byte[] ssidBytes = new byte[ssidLength]; 
      int ssidPointer = 0; 
      for (int i=ssidBytesStart+1; i<=ssidBytesStart+ssidLength; i++) { 
       ssidBytes[ssidPointer++] = payload[i]; 
      } 
      String ssid = new String(ssidBytes); 

      int passwordBytesStart = ssidBytesStart+ssidLength+4; 
      int passwordLength = payload[passwordBytesStart]; 

      byte[] passwordBytes = new byte[passwordLength]; 

      int passwordPointer = 0; 
      for (int i=passwordBytesStart+1; i<=passwordBytesStart+passwordLength; i++) { 
       passwordBytes[passwordPointer++] = payload[i]; 
      } 
      String password = new String(passwordBytes); 

      return new Pair<String, String>(ssid, password); 

     } catch(Exception e) { 
      return null; 
     } 
    } 

你可以看到我們結束了一個叫做密碼的字符串,這是我們想要的密碼:)。我手邊沒有Windows手機/視覺工作室來測試任何C#/ C++代碼。希望這很簡單,重寫它的Windows手機。