欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

Android NFC标签写入网址,感应到标签访问网页

发布时间:2024/1/1 Android 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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标签写入网址,感应到标签访问网页的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。