Android NFC开发(NFC读取)

您所在的位置:网站首页 nfc读取器读取校园卡 Android NFC开发(NFC读取)

Android NFC开发(NFC读取)

2023-08-13 07:26| 来源: 网络整理| 查看: 265

场景:NFC是目前Android手机一个主流的配置硬件项,本文主要讲解一下Android开发中,NFC刷卡的两种实现方式以及相关方法源码解析。

①:Manifest注册方式:这种方式主要是在Manifest文件对应的activity下,配置过滤器,以响应不同类型NFC  Action。使用这种方式,在刷卡时,如果手机中有多个应用都存在该NFC实现方案,系统会弹出能响应NFC事件的应用列表供用户选择,用户需要点击目标应用来响应本次NFC刷卡事件。目前我公司这边项目中使用了该逻辑,比较简便,这里先贴一下该方式的实现逻辑。

Manifest配置:

...

nfc_tech.xml:这个文件就是TECH_DISCOVERED需要配置的,其中,tech-list之间是逻辑或关系,tech之间是逻辑与关系,与方案②中的techLists原理以及用途是类似的。

android.nfc.tech.Ndef android.nfc.tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF

NfcActivity:

public class NfcActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nfc); initData(); } /** * 初始化数据 */ private void initData() { NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); if (null == adapter) { Toast.makeText(this, "不支持NFC功能", Toast.LENGTH_SHORT).show(); } else if (!adapter.isEnabled()) { Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS); // 根据包名打开对应的设置界面 startActivity(intent); } //我项目中是拿了NFC卡的tag中的id数据,这根据具体情况来; // 可以在NfcAdapter源码中查看,具体能拿到哪些数据 Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG); String id = bytesToHex(tag.getId()); //TODO 目前我这边项目中,拿到数据后,通过EventBus分发到对应的activity,当然也能使用其他分发响应方式, //关闭动画,毕竟对用户来说,刷卡应当是一个无感知的过程 overridePendingTransition(0, 0); finish(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); initData(); } /** * 2转10 * @param src * @return */ private static String bytesToTenNum(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length >> 4) & 0x0F, 16)); buffer[0] = Character.toUpperCase(Character.forDigit(src[i] & 0x0F, 16)); stringBuilder.append(buffer); } stringBuilder.reverse(); BigInteger bigi = new BigInteger(stringBuilder.toString(), 16); return bigi.toString(); } /** * 2转16 * @param src * @return */ private static String bytesToHex(byte[] src){ StringBuffer sb = new StringBuffer(); if (src == null || src.length


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3