我已经创建了我自己的QX10客户端应用程序,它刚刚发布到商店。(可在Windows Phone Store上找到: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个小时。我可以简单地子字符串来获得密码,但它似乎不是很可靠,因为它可能是不同的其他相机。
有没有关于这个Ndef记录类型的公开规范,这样我就可以可靠地读取它的SSID/Password了?
发布于 2014-12-31 03:13:49
不错的应用!虽然我不能直接帮助你,但我使用了Thibaud Michel (https://github.com/ThibaudM/timelapse-sony)的一些代码来让我的应用程序在安卓的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 phone上重写它是相当简单的。
https://stackoverflow.com/questions/27703204
复制相似问题