首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取Sony QX10的近场通信标签

读取Sony QX10的近场通信标签
EN

Stack Overflow用户
提问于 2014-12-30 17:55:43
回答 1查看 197关注 0票数 0

我已经创建了我自己的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类型:

代码语言:javascript
复制
application/x-sony-pmm

有效负载:

代码语言:javascript
复制
\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了?

EN

回答 1

Stack Overflow用户

发布于 2014-12-31 03:13:49

不错的应用!虽然我不能直接帮助你,但我使用了Thibaud Michel (https://github.com/ThibaudM/timelapse-sony)的一些代码来让我的应用程序在安卓的NFC连接上工作:

下面是处理从有效负载获取密码的java方法:

代码语言:javascript
复制
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上重写它是相当简单的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27703204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档