Android NFC基础知识汇总

点对点:两个NFC设备可以交换数据。

读卡器:NFC设备作为非接触读写器使用

卡模拟:将具有NFC功能的设备模拟成一张标签或者非接触卡。

常见的应用场景:读卡、写卡和分享内容。有三种数据过滤器,分别为:ACTION_NDEF_DISCOVERED,ACTION_TECH_DISCOVERED,ACTION_TAG_DISCOVERED。

ACTION_ NDEF_ DISCOVERED:当系统检测到tag中含有NDEF格式的数据时,且系统中有activity声明可以接受包含NDEF数据的Intent的时候,系统会优先发出这个action的intent。

ACTION_ TECH_ DISCOVERED:当没有任何一个activity声明自己可以响应ACTION_NDEF_DISCOVERED时,系统会尝试发出TECH的intent.即便你的tag中所包含的数据是NDEF的,但是如果这个数据的MIME type或URI不能和任何一个activity所声明的想吻合,系统也一样会尝试发出tech格式的intent,而不是NDEF.

ACTION_TAG_DISCOVERED:当系统发现前两个intent在系统中无人会接受的时候,就只好发这个默认的TAG类型。

NFC常见的数据格式(TechList):

android.nfc.tech.IsoDep

android.nfc.tech.NfcA

android.nfc.tech.NfcB

android.nfc.tech.NfcF

android.nfc.tech.NfcV

android.nfc.tech.Ndef

android.nfc.tech.NdefFormatable

android.nfc.tech.MifareUltralight

android.nfc.tech.MifareClassic

在res下新建xml,然后新建一个xxx.xml的文件将上方内容copy即可。然后在AndroidManifest.xml中,添加NFC权限:

后将要做NFC功能的界面的launchMode设置为singleTop类型,然后添加meta-data内容,如下:

<meta-data

android:name=“android.nfc.action.TECH_DISCOVERED”

android:resource=“@xml/nfc_tech_filter”/>

然后在activity中oncreate和onresume中初始化NFC。

private void initNfc() {

defaultAdapter = NfcAdapter.getDefaultAdapter(this);

if (null == defaultAdapter) {

Toast.makeText(this, “当前设备不支持NFC功能”, Toast.LENGTH_SHORT).show();

return;

}

try {

if (!defaultAdapter.isEnabled()) {

Toast.makeText(this, “请打开NFC功能”, Toast.LENGTH_SHORT).show();

return;

}

} catch (Exception e) {

return;

}

mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);

}

然后重写onNewInstance方法中通过

判断当前具备NFC功能的标签属于那种格式协议的。ndef格式举例:

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {

Log.e(“===========”, "processIntent:2 ");

Tag tag = intent.getParcelableExtra(defaultAdapter.EXTRA_TAG);

if (tag == null)

return;

String[] techList = tag.getTechList();

byte[] id = tag.getId();

tagIdStr = “ID:” + Utils.bytesToHexString(id) + “\n”;

tagIdStr += “type:” + tag.describeContents() + “\n”;

boolean is15693 = false;

for (String tecj : techList) {

tagIdStr += tecj + “\n”;

if (tecj.equals(“android.nfc.tech.NfcV”)) {

is15693 = true;

}

}

}

public class Utils {

public static String bytesToHexString(byte[] src){

StringBuilder stringBuilder = new StringBuilder(“”);

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

如何做好面试突击,规划学习方向?

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节

img

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值