如何使用 NFC 从 Windows Phone 8 向 Android 设备发送字符串

2024-06-22

使用谷歌没有任何运气,所以我想我会问。

有谁有经验/知道如何从 Windows Phone 8 设备向 Android 设备发送一个简单的字符串,即“hello”?

到目前为止,我们已经能够做到 android -> android 和 android -> windows Phone 8,但我们还没有找到如何从 windows Phone 8 到 android 的方法。

有没有人在网上看过指南或知道如何做这样的事情?

我想第一步是找出如何使 Windows Phone 8 上的应用程序实现其靠近 Android NFC 设备..然后是弄清楚如何使 Android 手机上的应用程序接收消息。

提前致谢!

* 回答 *

好的,这里有一些答案/提示

我最终以外部类型发送 NFC 消息,因为发送 application/my.mimetype 一直在 Windows Phone 上给我一个“抱歉,您的手机无法识别这种类型的文件”,即使消息已通过。

@Override
public NdefMessage createNdefMessage(NfcEvent event) {

    NdefMessage ndefMessage = new NdefMessage(( 
            new NdefRecord[] {createMimeRecord("packageName:externalType",docId.getBytes())}));

    return ndefMessage;
}

public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
    byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
    NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, mimeBytes, new byte[0], payload);
    return mimeRecord;
}

在 android 中你所要做的就是遵循 SDK 示例 (android-16/17 - AndroidBeamDemo) 中的 android 示例,这里对此进行了非常彻底的解释 -http://www.tappednfc.com/wp-content/uploads/TAPPED-NFCDeveloperGuide-Part1.pdf http://www.tappednfc.com/wp-content/uploads/TAPPED-NFCDeveloperGuide-Part1.pdf

但不要使用应用程序 mimetype,而是使用上述外部类型,并在清单中将以下内容而不是意图过滤器中的 mimetype 放入:

                <data
                android:host="ext"
                android:pathPrefix="/cco.drugformulary:externalType"
                android:scheme="vnd.android.nfc" />

关于从 Windows Phone 读取和发送消息,您可以使用接受的答案人员所说的操作,它应该可以工作,但对于类型 put cco.drugformulary:externalType 如上面所示(当然您的项目名称)。

如果您遇到任何问题,请随时问我


使用 WP8 NFC 时,基本上可以使用两种类型的消息:Windows 特定消息和 NDEF 消息。 Windows 特定消息很容易发现,因为您将它们发布为“Windows.*”消息类型。然而,NDEF 消息是使用“NDEF”消息类型发布的。例如,以下是 Windows 应用程序特定的消息:

    private void WriteAppSpecificStringToTag(object sender, RoutedEventArgs e)
    {
        ProximityDevice device = ProximityDevice.GetDefault();

        if (device != null)
        {
            device.PublishBinaryMessage("Windows:WriteTag.myApp",
                GetBufferFromString("Hello World!"),
                UnregisterOnSend);

            MessageBox.Show("Tap to write 'Hello World' on tag.");
        }
    }

NDEF 是一种广泛使用的跨平台格式,旨在针对 NFC 标签空间极其有限的环境(通常小于 100 字节)进行优化。虽然 WP8 Proximity 框架允许发送和接收 NDEF 消息,但它对 NDEF 格式一无所知。这意味着,WP8 邻近框架发送和接收字节流。作为应用程序开发人员,解析该字节流并正确格式化它是您的责任。

为了格式化和解析 NDEF 消息,您需要使用第 3 方框架或构建您自己的框架。就第三方框架而言用于邻近 API 的 NDEF 库 http://ndef.codeplex.com/做得很好。

例如,以下是如何使用以下命令格式化和编写特定于应用程序的 NDEF 消息:NDEF图书馆 http://ndef.codeplex.com/:

    private void WriteNDEFRecordToTag(object sender, RoutedEventArgs e)
    {
        ProximityDevice device = ProximityDevice.GetDefault();

        if (device != null)
        {
            device.PublishBinaryMessage("NDEF:WriteTag",
                new NdefMessage()
                {
                    new NdefRecord
                    {
                        TypeNameFormat = NdefRecord.TypeNameFormatType.ExternalRtd,
                        Type = "myApp".Select(c => (byte) c).ToArray(),
                        Payload = "Hello World!".Select(c => (byte) c).ToArray()
                    }
                }.ToByteArray().AsBuffer(),
                UnregisterOnSend);

            MessageBox.Show("Tap to write 'Hello World' on tag.");
        }
    }

以下是如何在应用程序中接收和解析 NDEF 消息:

    private void ReadNDEFRecordFromTag(object sender, RoutedEventArgs e)
    {
        ProximityDevice device = ProximityDevice.GetDefault();

        if (device != null)
        {
            device.SubscribeForMessage("NDEF", ndefMessageRecieved);

            MessageBox.Show("Registered to NFC tag. Tap with NFC tag.");
        }
    }

    private void ndefMessageRecieved(ProximityDevice sender, ProximityMessage message)
    {
        var ndefMessage = NdefMessage.FromByteArray(message.Data.ToArray());

        StringBuilder sb = new StringBuilder();
        foreach (NdefRecord record in ndefMessage)
        {
            sb.AppendLine(Encoding.UTF8.GetString(record.Payload, 0, record.Payload.Length));
        }
        Dispatcher.BeginInvoke(() => MessageBox.Show(sb.ToString()));
    }

当我们在 WP8 上运行此代码片段并点击之前编写的 NDEF 标记时,我们可以看到以下消息:

如果我们采用相同的 NFC 标签并使用 Android 的app我们可以看到相同的数据:

如果您想知道使用 NDEF 时实际传输/传输的内容,请参阅我们刚刚使用的标签上的 GoToTags Windows 应用程序:

如果 NDEF 库对您来说有点沉重,您可以随时开发自己的 NDEF 格式化程序和解析器。诺基亚 OSS 项目中有一个很好的例子@NFC标签阅读器 https://projects.developer.nokia.com/nfctagreader

关于 NFC 手机到手机与 NFC 手机到标签,上面的代码片段适用于这两种情况。如果您想写入标签,只需在消息类型中保留“:WriteTag”操作即可。如果您想直接与附近的电话通信,只需删除“:WriteTag”操作即可。两者都可以在 WP8Android 上正常工作。

但请注意,Android 和 WP8 处理 NDEF 的方式存在差异。 WP8 只能读取消息中的第一个 NDEF 记录,而 Android 可以读取所有 NDEF 记录。 Android 可以使用非 NDEF 格式的标签并对其进行格式化; WP8 必须使用 NDEF 格式的标签。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 NFC 从 Windows Phone 8 向 Android 设备发送字符串 的相关文章

  • npm 在 Windows 中不被识别为内部或外部命令

    当我尝试跑步时npm install在 Windows 上 我收到以下错误 怎样才能摆脱它呢 D Xampp htdocs laravelchat gt npm install CALL C Program Files nodejs nod
  • Android studio 不让我安装 Android SDK 平台

    一切都工作正常 直到我导入 Esclipse Lollipop 示例并出现以下错误 我在 Mac OS X 上遇到了完全相同的问题 以下是我修复它的方法 cd Library Android sdk tools android update
  • 如何在Android中访问Sqlite数据库?

    我可以在模拟器中使用 adb shell 命令访问我的 sqlite 数据库 但无法对我的 HTC Desire 手机执行相同操作 它会抛出一些权限被拒绝的消息 是否有可能访问这些数据库以进行调试 任何想法 提前致谢 您还可以在命令提示符
  • CollapsingToolbarLayout 无法识别滚动 fling

    我创建了一个简单的折叠工具栏布局它就像一个魅力 我的问题是 如果我尝试在嵌套滚动视图 当我松开手指时它就会停止 正常的滚动就像它应该的那样工作 我的活动代码是不变 gt 自动生成空活动 我只是单击了 android studio 中的 创建
  • Android - 缩放和压缩位图

    我正在开发一个 Android 应用程序 它具有相机捕捉和照片上传功能 如果设备具有高分辨率相机 则捕获的图像尺寸将非常大 1 3MB或更大 由于应用程序需要将此图像上传到服务器 因此我需要在上传之前压缩图像 例如 如果相机拍摄了 1920
  • 覆盖服务 - 按下返回按钮

    我怎样才能做到这一点 目前的解决方案 我启动了一个透明的活动 捕获后按 将其转发到我的服务 然后自行关闭 但此活动将在当前正在运行的活动中可见 因此这不是一个非常漂亮的解决方案 看到的解决方案 我见过一个应用程序确实可以捕获服务中的后按 而
  • 透明模糊视图模糊了下面的布局

    我有一个已设为透明的 Linearlayout 现在我正在寻找一种方法来赋予它模糊效果 因此它下面的内容会变得模糊 就像 Windows 7 Aero 外观一样 参见屏幕截图 我知道你可以做这样的模糊效果 getWindow addFlag
  • 如何在 Google Maps API V2 中获取我的当前位置

    我正在创建一个应用程序 用户需要使用 getMyLocation 查看他 她的地理位置 但这返回 null 有没有解决这个问题的方法 因为我确实读到 getMyLocation 方法总是返回 null 我是 Google 地图新手 因此我们
  • 插入新的 USB 设备时会发生什么?

    我有一个带有 USB 连接的嵌入式设备 当用户将设备插入 PC Windows OSX 时 操作系统如何发现要安装哪些驱动程序 如何得到my驱动程序被选择 它们可以驻留在某个中央服务器上 由操作系统供应商运行 吗 这是针对 Windows
  • 如何从内存中清除动态创建的视图?

    我试图从记忆中清除一些观点 情况是这样的 我有一个活动 我将其称为 A 另一个称为 B 现在 我在 Activity A 中按下一个按钮 该按钮调用 Activity B 动态创建大量视图 之后 我按后退按钮返回到活动 A 多次重复这两个步
  • SQLite CursorWindow 限制 - 如何避免崩溃

    我必须执行查询并将结果存储在列表中 我使用的函数如下 List
  • 在 KtorClient 的 DefaultRequest 中声明 ContentType = Application.Json 后,我可以更改特定请求的 ContentType 标头吗

    我正在开发我的 android 项目 我正在创建一个请求函数来上传文件 该函数发出如下请求 httpClient put uri body MultiPartFormDataContent formData append file file
  • 将 Dagger 与 Espresso 一起使用

    我计划在我的应用程序多模块上创建 Espresso 测试 并且我即将创建第一个 Espresso 测试 但我看到的是 在我的应用程序上我没有AppComponent我可以在哪里伪造它 由于我想在我的功能模块上添加测试 我将创建TestApp
  • 无法启动由 ContextImpl.openFileOutput 处的 NullPointerException 引起的活动

    我发布了一个使用 Google 地图 Android 兼容性库的应用程序 https github com petedoyle android support v4 googlemaps https github com petedoyle
  • Gradle 警告:不推荐使用variant.getOutputFile() 和variant.setOutputFile()

    我在 Android 应用程序项目中使用以下简化配置 android compileSdkVersion 20 buildToolsVersion 20 0 0 defaultConfig minSdkVersion 8 targetSdk
  • Windows 故障转储调用堆栈仅显示 wow64

    Problem 我有一个我们开发的供内部使用的 Windows 应用程序 感谢 Windows 错误处理 窗口保持打开状态 我可以轻松地从任务管理器生成故障转储 我以前曾通过 eclipse 在 linux 上使用过一次故障转储 但这是第一
  • Android Studio - 程序类型已存在:com.google.android.gms.internal.measurement.zzwp

    昨天 我的应用程序运行良好 今天 不知道为什么 重新打开Android Studio后 应用程序就无法编译了 显示的错误是 Program type already present com google android gms intern
  • RubyMine - 没有为项目配置 Ruby 解释器

    我进入 设置 Ruby SDK 和 Gems 然后选择C RailsInstaller Ruby1 9 3 bin ruby exe 它在右侧加载了一堆宝石 看起来它会起作用 我点击 确定 但仍然有糟糕的语法突出显示 并且它仍然认为它没有
  • 将文本文件写入 SD 卡失败

    我遇到了一个奇怪的问题 我的应用程序可以将一个简单的文本文件写入 SD 卡 有时它对某些人有效 但对其他人无效 我不知道为什么 对于某些人来说 如果他们输入一些字符 例如 在文件等中 我似乎无法重现它 因为我没有遇到任何麻烦 但这是处理文件
  • 将我的应用程序添加到“添加快捷方式”列表,以便在主屏幕上有快捷方式

    如您所知 当您长按主屏幕时 手机会显示列表菜单 您可以添加快捷方式 小部件 文件夹等 我希望我的应用程序位于快捷方式列表中 我怎样才能做到这一点 快捷方式自 API 级别 1 起就已存在 并且也可由 3rd 方应用程序使用 要将活动添加到快

随机推荐

  • 将数据传递到 Vue 模板

    我对 vue 相当陌生 不知道如何在模板中添加数据值 我正在尝试构建一个非常基本的表单生成器 如果我单击一个按钮 它应该将另一个数据数组添加到组件变量中 这是有效的 我正在执行 v for 来添加输入字段 其中某些属性是该组件的数组的一部分
  • 如何在 Haskell 中创建异构列表? (最初是Java)

    如何将以下 Java 实现转换为 Haskell 这里的主要目的是拥有一个包含作为特定接口的子类型的各种元素的列表 我尝试制作下面的 Haskell 版本 但未能达到我的目的 这里的重点是xs有类型 Bar 而不是Foo a gt a 这是
  • Excel 表格:识别未使用的代码

    我正在更新一个excel questions tagged excel由其他人编写的应用程序 当然 我发现很多没用过的Sub CommandButtonXX Click subs 而且我并不总是确定该按钮是否仍然存在 有没有办法 程序 VB
  • iOS7 UIStatusBar 模糊不正确

    我使用 UIToolbar 作为屏幕顶部的控件 没有导航控制器 工具栏具有我想要的外观 但是状态栏完全清晰 我似乎无法模仿 UIToolbar 的透明度的模糊性 有没有人遇到过不涉及使用导航控制器的解决方案 为了实现这一点 您需要实现 UI
  • 模板文件中的 Django urldecode

    有什么办法可以做到urldecode在 Django 模板文件中 就在对面网址编码 http docs djangoproject com en dev ref templates builtins from olddocs urlenco
  • 交叉编译共享库

    我想知道是否有可能 如果是的话 如何 与 Go 交叉编译共享库 假设我有这段代码 package main import C export DoubleIt func DoubleIt x int int return x 2 func m
  • 无法解析:com.android.support:appcompat-v7:26.0.0

    我在 Android studio 中遇到这个问题 Error 22 13 Failed to resolve com android support appcompat v7 26 0 0 a href install m2 repo I
  • git Push 崩溃并显示“inflate returned -551”

    将 git 存储库从一台 ubuntu 服务器推送到另一台 ubuntu 服务器时 出现以下错误 Pushing to gitosis xxx yyy Enter passphrase for key home ngrislain ssh
  • 如何使用 Nginx 在子文件夹/URL 前缀上托管 Flask 应用程序?

    我有一个 Flask 应用程序 我想将其托管在网站的子文件夹中 例如example com cn 我像这样配置我的 nginx location cn proxy pass http localhost 8000 所以如果我访问exampl
  • 平滑 GPS 跟踪的路线坐标

    我有一些记录的坐标数据 不幸的是 他们似乎不太好 他们有时会跳过地图 所以现在我正在寻找一些扁平化或过滤算法 使路线看起来更真实 目前 我唯一的过滤器是计算一秒钟内 公交车 汽车或步行 行驶的最大可能米数 并将它们与坐标进行比较 扔掉那些在
  • 无法使用 post 请求从网页获取某些内容

    我在 python 中创建了一个与 selenium 相关的脚本 用于从网页的左侧边栏中抓取位于类似容器的盒子内的一些内容 当我使用硒时 我可以毫无困难地获得它们 现在 我想使用请求模块获得相同的内容 我在开发工具中做了一些实验 注意到发送
  • 在VBA中对选定单元格执行修剪功能

    我想弄清楚是否有一种方法可以在 Excel 宏中运行一个简单的函数 TRIM 以删除重复的空格字符 以便它直接在单元格上执行 这样我就不必创建一个额外的列TRIM 前一列的函数 它应该适用于选定的列要不就选定的单元格 Sub trim Ac
  • sed(和其他)会损坏非 ASCII 文件吗?

    如果我编写一些操作文件的脚本 例如使用 sed 进行搜索 替换 并且文件可以采用各种字符集 那么文件是否会损坏 我希望替换的文本是 ASCII 并且也仅出现在仅包含 ASCII 的文件中的行上 但其余行包含其他字符集中的字符 如果您的字符集
  • 在 Python 3.6 上的 websocket 客户端中侦听传入消息时出现问题

    我正在尝试建立一个网络套接字客户端上Python从这里使用 websockets 包 Websocket 4 0 API https websockets readthedocs io en stable api html module w
  • Galaxy Mega 与其他平板手机和 Android Manifest

    我的应用程序的清单条目如下
  • 现在有多少 Android 设备支持 GLSurfaceView.setPreserveEGLContextOnPause?

    我不需要确切的数字 百分比就足够了 例如 如果我开发一个具有 4 0 分钟 SDK 版本的应用程序 我如何确保上下文将被保留 可能取决于 OpenGL ES 版本吗 我试图查找有关具有有限 EGL 上下文的芯片的信息 但找不到任何信息 我需
  • 在 Silverlight 中使用反射来迭代所有引用程序集中的类型?

    silverlight中有类似的东西吗 var assemblies AppDomain CurrentDomain GetAssemblies http msdn microsoft com en us library system ap
  • 连续传递风格的中间值和返回值

    我来自 OOP 非功能性背景 因此我无法完全可视化有关以下方面的几个在线示例连续传递 https en wikipedia org wiki Continuation passing style 另外 像Scheme这样的函数式语言不必指定
  • Rails 5.2 与 master.key - Heroku 部署

    Rails 5 2 通过使用 Awesome 引入了加密秘密功能credentials yml 但我正在努力让它与 Heroku 一起工作 现在有什么策略可以将 Rails 5 2 应用程序部署到 Heroku 吗 你应该设置环境变量RAI
  • 如何使用 NFC 从 Windows Phone 8 向 Android 设备发送字符串

    使用谷歌没有任何运气 所以我想我会问 有谁有经验 知道如何从 Windows Phone 8 设备向 Android 设备发送一个简单的字符串 即 hello 到目前为止 我们已经能够做到 android gt android 和 andr