Android NFC标签写入网址,感应到标签访问网页
首先在AndroidManifest.xml文件中添加如下配置
<!-- SDK版本至少为14 -->
<uses-sdk android:minSdkVersion="14"/>
<!-- 添加NFC权限 -->
<uses-permission android:name="android.permission.NFC" />
<!-- 要求当前设备必须要有NFC芯片 -->
<uses-feature android:name="android.hardware.nfc" android:required="true" />
然后创建一个NFC写标的类MainActivity
NFC主要相关类有NdefMessage、NdefRecord、Ndef、NdefFormatable,具体使用方法见如下代码及注释
package com.xindecoiot.nfcreadinfo;import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private NfcAdapter mNfcAdapter;private PendingIntent mPendingIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onStart() {super.onStart();mNfcAdapter = NfcAdapter.getDefaultAdapter(this);// 用于感应到NFC时启动该Activity// 这里建议将处理NFC的子类的launchMode设置成singleTop模式,这样感应到标签时就会回调onNewIntent,而不会重复打开页面mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);}/*** 获得焦点,按钮可以点击*/@Overridepublic void onResume() {super.onResume();// 设置当该页面处于前台时,NFC标签会直接交给该页面处理if (mNfcAdapter != null) {mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);}}/*** 暂停Activity,界面获取焦点,按钮可以点击*/@Overridepublic void onPause() {super.onPause();// 当页面不可见时,NFC标签不交给当前页面处理if (mNfcAdapter != null) {mNfcAdapter.disableForegroundDispatch(this);}}// 将Activity的launchMode设置成singleTop,这样当感应到NFC标签时不会重复打开页面,而是回调该方法@Overridepublic void onNewIntent(Intent intent) {Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);writeTag(detectedTag);}/*** 写标* @param tag*/public void writeTag(Tag tag) {if (tag == null) {return;}// 根据网址创建待写入的数据NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{NdefRecord.createUri(Uri.parse("https://www.himmy.cn"))});// 获取内容字节大小int size = ndefMessage.toByteArray().length;try {// 获取NedfNdef ndef = Ndef.get(tag);// 不为空表示该标签为Nedf格式if (ndef != null) {ndef.connect();// 是否可写if (!ndef.isWritable()) {Toast.makeText(this, "标签不支持写入", Toast.LENGTH_SHORT).show();return;}// 判断写入内容大小是否超出允许写入的最大值if (ndef.getMaxSize() < size) {Toast.makeText(this, "写入内容过大", Toast.LENGTH_SHORT).show();return;}// 写入数据ndef.writeNdefMessage(ndefMessage);Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();} else { // 标签非Nedf格式的情况NdefFormatable format = NdefFormatable.get(tag);// 不为空表示该标签允许格式化成Ndef格式if (format != null) {format.connect();// 格式化并写入Nedf内容format.format(ndefMessage);Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "标签不支持Nedf格式", Toast.LENGTH_SHORT).show();}}} catch (Exception e) {}}
}
最后记得把MainActivity的启动模式设置成singleTop
<activityandroid:name=".MainActivity"android:launchMode="singleTop"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>
测试
- 首先准备一台支持NFC功能的手机,打开我们写好的应用
- 准备一张NFC标签,靠近手机NFC读取区域(一般在背部)
- 提示写入成功后,关闭应用
- 再次将NFC标签靠近手机,将会提示访问我们写入标签的网页,点击确认就会打开浏览器访问该网页
Android NFC标签写入网址,感应到标签访问网页相关推荐
- Android NFC 标签读写Demo与历史漏洞概述
文章目录 前言 NFC基础 1.1 RFID区别 1.2 工作模式 1.3 日常应用 NFC标签 2.1 标签应用 2.2 应用实践 2.3 标签预览 2.4 前台调度 NFC开发 3.1 NDEF数 ...
- Android NFC标签写入应用包名,感应到标签自动打开应用
首先在AndroidManifest.xml文件中添加如下配置 <!-- SDK版本至少为14 --> <uses-sdk android:minSdkVersion="1 ...
- android自动添加包,android nfc写入应用程序包名与网址 自动打开应用程序与网址...
安卓手机大部分手机提供了NFC芯片 可以根据NFC传递数据 NFC卡与手机 手机与手机数据等交互 非常好的功能,这篇文章教大家如何向NFC卡或标签写入功能. 用法 : 点击包名 将N ...
- android nfc标签类型,Android NFC标签 开发深度解析 触碰的艺术
原标题:Android NFC标签 开发深度解析 触碰的艺术 本文来自于CSDN博客,作者:郭朝,已获授权,版权归原作者所有,未经作者同意,请勿转载. 欢迎同有博客好文章的作者加微信(ID:tm_fo ...
- Android NFC标签 开发深度解析 触碰的艺术
这篇博客是在鸿洋的微信公众号看到的感觉收益非浅.于是转存于自己博客上以后可查阅. 本文由郭朝投稿. 郭朝的博客地址: http://blog.csdn.net/smartbetter 有几天没有更新博 ...
- Android之自定义瀑布流式的标签列表
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50965588 本文出自:[顾林海的博客] ##前言 由于一些原因,马上 ...
- 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...
- android sdk是灰的,Android Studio 2.3 sdk管理器标签灰显
Android Studio 2.3 - >配置 - > SDK管理器. 这些选项卡呈灰色显示: SDK工具,SDK更新站点.此外,"Show Package Details&q ...
- android热门搜索标签,Android网易云历史搜索和热门标签
Android网易云历史搜索和热门标签 最近开发了一个网易云音乐播放器,有这么一个需求,需要展示搜索建议,历史搜索记录 项目地址: github.com/shellhub/Ne- search_ent ...
最新文章
- VMware下ghost安装XP后无法从硬盘启动的问题
- 正则表达式之IP地址检验
- linux父子进程同步实验,Linux-父子进程的简单同步
- [HNOI2012]三角形覆盖问题
- 电商美工必备,品质超高的万能套用促销PSD分层模板,宝藏!
- LuckyFrame执行Web自动化用例
- kuangbin专题一——Fliptile
- JavaWEB-Servlet
- 【解决思路】当前不会命中断点,还未为文档加载任何符号
- python 冒号分隔_以冒号分隔的分析
- 学习Pandas(Kaggle)
- Cisco VPP IKEV2 配置说明
- zlib库介绍一:zlib简介
- 给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)
- 利用Matlab解决线性规划问题并绘制特定形状的空间曲面(约束区域的绘图)
- Linux之ss命令
- 专访 iOS 技术专家孙源:开发者的成长始于“死磕”
- Android 错把setLayerType当成硬件加速
- 5个免费的项目管理工具7款最流行的在线项目管理工具
- 【tensorflow】生成.pb文件