我创建了自己的QX10客户端应用程序,它刚刚发布到商店。 (可在Windows Phone商店中找到:http://www.windowsphone.com/en-us/store/app/nc-qx10/1c8d71da-0e4b-43cd-a5c2-020a072419d3并且它在这里开源:https://github.com/nantcom/SonyCameraSDK {尚未同步,仍在清理代码......})我的下一步是获取相机来自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 :(得分:0)
好的应用程序!虽然我无法直接帮助您,但我使用了Thibaud Michel(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;
}
}
你可以看到我们最终得到一个名为password的字符串,这是我们想要的密码:)。我手头没有Windows phone / visual studio来测试任何C#/ C ++代码。希望用Windows手机重写它非常简单。