首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过NFC启动应用程序,并在启动时发送一条NDEF消息

通过NFC启动应用程序,并在启动时发送一条NDEF消息
EN

Stack Overflow用户
提问于 2013-10-09 00:38:09
回答 1查看 3.1K关注 0票数 1

我正在开发一个使用NFC与其他设备交互的Android应用程序。这种互动主要由两个步骤组成:

  1. 当设备从其他设备接收到NFC指定的URI时,应用程序就会启动。
  2. 当应用程序启动时,它会向另一个设备发送一条NDEF消息。

对于第一步,我已经将以下行添加到AndroidManifest.xml文件中。这样,当设备接收到类型为MainActivity的URI时,将启动myprotocol:something

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<intent-filter>
     <action android:name="android.nfc.action.NDEF_DISCOVERED" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:scheme="myprotocol" />
 </intent-filter>

对于第二步,我的MainActivity类实现了CreateNdefMessageCallbackOnNdefPushCompleteCallback。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
    adapter.setNdefPushMessageCallback(this, this);
    adapter.setOnNdefPushCompleteCallback(this, this);
}

@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    NdefRecord uriRecord = NdefRecord.createUri("protocol:something");
    NdefMessage message = new NdefMessage(new NdefRecord[] { uriRecord });
    return message;
}

@Override
public void onNdefPushComplete(NfcEvent event) {

}

所以,现在问题

这两个部分可以独立工作,但当我将这两个部分都添加到应用程序时就不会了。

也就是说,如果我添加第一部分,当接收到NDEF消息时,应用程序将正确启动。此外,如果我只添加第二部分,如果我点击我的设备到其他设备运行应用程序,我看到触摸到波束接口,并发送NDEF消息。

问题是,如果我同时添加,当我点击到另一个设备时,应用程序就会启动,但是触摸到光束的界面永远不会显示出来。如果我分开设备并再次点击,MainActivity就会重新启动,但我永远看不到发送消息的选项。

我如何才能达到所需的情景?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-09 06:52:33

在两个Android设备上使用Beam是不可能的(请注意,对于其他设备,特别是当一个是Android设备,一个是专用的NFC阅读器或一个设备,您可以在一个低级别上控制NFC功能,或者一个模仿NFC标记的设备)。

然而,在两台Android设备之间,只需对现有的场景进行很少的修改,就可以采用双击方式。您只需添加一个前台调度,它将拦截传入的NDEF消息,从而阻止Android重新启动您的活动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void onResume() {
    super.onResume();
    NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
    PendingIntent pi = PendingIntent.getActivity(
            this,
            0,
            new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),
            0);
    adapter.enableForegroundDispatch(this, pi, null, null);
}

编辑

对于双抽头场景,一个更普遍的方法是在第一个点击时将NDEF消息从设备A发送到设备B。此NDEF消息在设备B上启动应用程序。发送NDEF消息后,设备A立即停止发送消息。当设备B上的应用程序处于活动状态时,它会为Beam注册自己的NDEF消息。然后,在第二个点击中,Beam将显示在设备B上,单击Beam屏幕将向设备A发送响应NDEF消息。

注意,设备A必须停止发送其初始NDEF消息。否则,设备B上的应用程序将收到一条新的NDEF消息,因此不会打开Beam。

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

https://stackoverflow.com/questions/19266944

复制
相关文章
Android开发 - NFC基础
本文档介绍了在Android上的基本的NFC任务。它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Android框架里支持这些功能的API。对于更高级的主题,包括与非NDEF数据的讨论,请参阅高级NFC。
张云飞Vir
2020/03/16
2.2K0
Android训练课程(Android Training) - NFC基础
本文档介绍了在Android上的基本的NFC任务。它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Android框架里支持这些功能的API。对于更高级的主题,包括与非NDEF数据的讨论,请参阅高级NFC。
张云飞Vir
2020/03/13
9450
Android NFC简介 博客分类: Android android nfc 近场通信
近场通讯 (Near Filed Communication) 技术是一种近距离的高频无线通信技术, 通常距离是4 厘米或更短。 NFC 工作频率是 13.56M Hz, 传输速率是 106kbit/s 到 848kbit/s. NFC 总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。
chroya
2018/10/31
1.8K0
Android NFC开发详细总结[通俗易懂]
Near Field Communication (NFC) 为一短距离无线通信技术,通常有效通讯距离为4厘米以内。NFC工作频率为13.65 兆赫兹,通信速率为106 kbit/秒到 848kbit/秒。NFC手机相比普通手机来说,
全栈程序员站长
2022/07/29
1.2K0
Qt官方示例-NFC留言板
  QML留言板示例演示从NFC标签读取的NDEF消息的内容。每个新检测到的NDEF消息都会添加到软木板中,并且可以拖动到木板上的任意位置。软木板具有个人和工作空间。可以通过向左或向右滑动来更改工作区。
Qt君
2023/03/17
2.5K0
Qt官方示例-NFC留言板
nfc近场通信
NFC简介: Near Field Communication 近场通信,是一种数据传输技术。 与wifi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm。 NFC支持3种工作模式: 1.读卡器模式; 2.仿真卡模式; 3.点对点模式; 1.读卡器模式: 通过NFC设备(支持NFC的Android手机)从带有NFC芯片的标签、贴纸、报纸、明信片等媒介读取信息,或将数据写到这些媒介中。 2.仿真卡模式: 是将支持NFC的手机或其他电子设备当成借记卡、信用卡、公交卡
xiangzhihong
2018/02/01
4K0
nfc近场通信
Android NFC 技术解析,附 Demo 源码
近期由于项目需求,对 Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。 NFC 是 Near Field Communication 缩写,即近距离无线通讯技术。可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。简单一点说,nfc 功能是什么?nfc 功能有什么用?其实** NFC** 提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC 技术允许电子设备之间进行非接触式点对点数据传输,在十
非著名程序员
2018/02/02
3.1K0
Android NFC 技术解析,附 Demo 源码
Android开发笔记(一百六十一)NFC近场通信
NFC的全称是“Near Field Communication”,意思是近场通信、与邻近的区域通信。大众所熟知的NFC技术应用,主要是智能手机的刷卡支付功能。别看智能手机是近十年前才出现的,NFC的历史可比智能手机要悠久得多,它脱胎于上世纪的RFID无线射频识别技术。 所谓RFID是“Radio Frequency Identification”的缩写,它通过无线电信号便可识别特定目标并读写数据,而无需自身与该目标之间建立任何机械或者光学接触。像日常生活中的门禁卡、公交卡,乃至二代身份证,都是采用了RFID技术的卡片。若想读写这些RFID卡片,则需相应的读卡器,只要用户把卡片靠近,读卡器就会产生感应动作。 既然RFID已经广泛使用,那么何苦又要另外制定NFC标准呢?其实正是因为RFID用的地方太多了,导致随意性较大,反而不便于更好地管控。所以业界重新定义了NFC规范,试图在两个方面弥补RFID的固有缺憾: 1、RFID的信号传播距离较远,致使位于远处的设备也可能获取卡片信息,这对安全性较高的场合是不可接受的。而NFC的有效工作距离在十厘米之内,即可避免卡片信息被窃取的风险。 2、RFID的读写操作是单向的,也就是说,只有读卡器能读写卡片,卡片不能拿读卡器怎么样。现在NFC不再沿用“读卡器——卡片”的模式,取而代之的是只有NFC设备的概念,两个NFC设备允许互相读写,既可以由设备A读写设备B,也可以由设备B读写设备A。 改进之后的NFC技术既提高了安全性,又拓宽了应用场合,同时还兼容现有的大部分RFID卡片,因此在智能手机上运用NFC而非RFID也就不足为怪了。 带有NFC功能的手机,在实际生活中主要有三项应用:读卡、写卡、分享内容(两部手机之间传输数据)。为了能更迅速地了解NFC技术在Android中的开发流程,下面通过相对简单的读卡功能,来介绍如何进行手机App的NFC开发。 首先App工程要在AndroidManifest.xml中声明NFC的操作权限,下面是配置声明的例子:
aqi00
2019/01/18
2.8K0
nfc开发
    很多Android设备已经支持NFC(近距离无线通讯技术)了。本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发。 Android NFC开发环境        使用硬件:Google Nexus S,北京大学学生卡。(ps:笔者本想使用公交一卡通进行测试,发现手机不能正确识别)        手机操作系统:Android ICS 4.04。        开发时,笔者从Google Play Store上下载了NFC TagInfo软件进行对比学习。所以我们可以使用任意一
xiangzhihong
2018/01/29
3.6K0
nfc开发
[034]Activity启动时间
我相信大家肯定遇到过Activity启动慢的BUG,在优化问题之前,我们都会自我测试一下Activity启动耗时是不是和测试给的数值一样,在我们没有高速相机的情况下,我们如何获得Activity启动时间。 我一般都用这个指令:
王小二
2020/06/08
2.1K0
[034]Activity启动时间
如何改善应用程序在 Linux 中的启动时间
大多数 Linux 发行版在默认配置下已经足够快了。但是,我们仍然可以借助一些额外的应用程序和方法让它们启动更快一点。其中一个可用的这种应用程序就是 Preload。它监视用户使用频率比较高的应用程序,并将它们添加到内存中,这样就比一般的方式加载更快一点。因为,正如你所知道的,内存的读取速度远远快于硬盘。Preload 以守护进程的方式在后台中运行,并记录用户使用较为频繁的程序的文件使用相关的统计数据。然后,它将这些二进制文件及它们的依赖项加载进内存,以改善应用程序的加载时间。简而言之,一旦安装了 Preload,你使用较为频繁的应用程序将可能加载的更快。
用户8639654
2021/10/15
3.8K0
Ink笔记_ink correction
1.ST25DV作为NFC的PHY通过I2C总线和STM32通信,主要作用有两个:能量采集以及NFC通信。注意,ST25DV只是负责和手机进行NFC通信,而不负责IC卡的读写功能,因为ST25DV只支持ISO 15693的RFID协议,而我们常用的IC卡(M1卡)是ISO 14443协议的,所以并不能直接使用这颗芯片进行IC卡模拟。
全栈程序员站长
2022/11/17
1.7K0
Ink笔记_ink correction
公众号通过api发送小程序消息
接口调用请求说明: http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_T
吴蛋蛋
2023/03/14
1.7K0
公众号通过api发送小程序消息
Android 4.0 平台特性
Android 4.0 平台特性 API等级:14  Android4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性。在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题带给了小屏幕设备,因此我们说 Android 4.0 是一次重要的平台发布版。作为一名开发者,现在你拥有了单一的平台和统一的 API 框架,使你可以开发,并通过一个APK 来发布你的应用程序,并且可以为运行相同版本Android(Android 4.0[API级别14]或以上版本) 的手机、平板电脑和其他设备提供优化了的用户体验。
张拭心 shixinzhang
2022/05/06
1.2K0
移动支付方式要被这壶老酒颠覆了
最近华为推出了一种"新颖"的支付方式:碰一碰支付。用户使用手机接触一下支付标签,就可以调起支付程序,输入密码就可以完成支付。这一支付方式被一众KOL捧上了天:“移动支付的未来”,"颠覆支付宝和微信的支付方式"...讲真的,你们难道忘记了Apple pay么?新壶老酒也值得炒一番?不过这酒真香...
曲水流觞
2019/10/28
1.4K0
启动kafka服务并用golang发送和接受消息
kafka系列分为两个篇幅,分别是实用篇,讲使用命令和一些使用中会遇到的概念名词,理论篇,讲kafka为了实现高可用和高性能做了哪些努力。这篇我们从搭建开始,然后用kafka脚本去发送和接受信息,最后用go语言展示在代码之中怎么使用。
用户7962184
2020/11/20
2.9K0
springboot启动时执行
可以实现CommandLineRunner接口然后重写run方法,在run方法里执行
阿超
2022/08/16
4120
使用python通过接口方式发送钉钉消息
目前钉钉支持群聊消息的通过接口发送,需要建立群聊: 1、创建群聊 2、群聊设置自定义机器人: 根据提示自定义设置,最后获取webhook地址 相关说明文档 3、发送消息实现: def
JQ实验室
2022/01/11
2K0
使用python通过接口方式发送钉钉消息
SpringBoot2.x基础篇:应用程序在启动时访问启动项参数
SpringBoot应用程序在启动时,我们可以传递自定义的参数来进行动态控制逻辑,比如我们使用--debug启动参数时就会使用debug启动应用程序,在控制台打印一些调试日志信息。
恒宇少年
2020/03/20
2.5K0
SpringBoot2.x基础篇:应用程序在启动时访问启动项参数
点击加载更多

相似问题

通过NFC发送NDEF消息

13

NFC NDEF消息

10

NFC扫描NDEF消息时启动活动

26

Arduino NFC读取NDEF消息

10

从Android应用程序的NFC标签读取NDEF消息

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文