android手机中如何写入NFC程序?怎样能读到一张卡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android手机中如何写入NFC程序?怎样能读到一张卡相关的知识,希望对你有一定的参考价值。

android读写NFC的步骤:
1.首先要在AndroidManifest.xml中声明如下配置信息:
使用<uses-permission>元素允许设备访问NFC硬件:
<uses-permission android:name="android.permission.NFC" />

2.使用<uses-sdk>元素设置最小SDK版本:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />

3.NFC TAG的发布系统:
当android设备扫描到一个NFC标签时,会自动寻找最适合的Activity来处理这个TAG,如果有多个Activity满足条件的话,会让用户来选择到底使用哪一个Activity来处理,可以理解为就是简单的事件响应与事件处理。

4.如何让一个Activity监听 ”当扫描到NFC标签时” 的这一个事件呢?使用intent filter。
可以理解为当检测到一个NFC标签时,系统自动创建一个相关的Intent对象,含有响应intent filter的Activity将处理这个Intent。
其中,intent filter声明如下:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" ></action>
<category android:name="android.intent.category.DEFAULT" ></category>
<data android:mimeType="text/plain" ></data>
</intent-filter>

5.读取NFC标签中NDEF格式的文本信息:
先判断手机支不支持NFC功能,若支持,是否已设置开启状态。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write);
nfcTView=(TextView)findViewById(R.id.info_tv);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null)
nfcTView.setText("设备不支持NFC!");
finish();
return;

if (nfcAdapter!=null&&!nfcAdapter.isEnabled())
nfcTView.setText("请在系统设置中先启用NFC功能!");
finish();
return;



6.读取NFC卡的内容
private boolean readFromTag(Intent intent)
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage mNdefMsg = (NdefMessage)rawArray[0];
NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];
try
if(mNdefRecord != null)
readResult = new String(mNdefRecord.getPayload(),"UTF-8");
return true;


catch (UnsupportedEncodingException e)
e.printStackTrace();
;
return false;
参考技术A 首先你读的卡需要支持NFC规范,M1卡或者是CPU卡都可以,只要是遵循mifare或者是felica协议就可以。其次你要有权限读这张卡,M1卡的
读写都需要密钥,比较难弄;CPU卡,如果是符合PBOC2.0规范,读不需要密钥,写是需要密钥的,因此你可以找CPU卡,北京的公交卡和深圳的公交卡
都可以。这块有点负责,和芯片有关,你还需要知道7816指令,2.3.3中好像没提供相应的指令常量,因此要自己写,才能做卡的读写。本回答被提问者和网友采纳

NFC技术:让Android自动打开网页

 1 //实现自动打开网页
 2 //程序包含NFC的格式化,和向NFC写入数据
 3 //程序运行好后,将NFC标签放在手机背部,。。弹出toast后,关闭程序,再将NFC标签放在手机背部实现自动打开百度网页
 4 public class AutoOpenUriActivity extends Activity {
 5     private NfcAdapter nfcAdapter;
 6     private PendingIntent pendingIntent;
 7     String url = "https://www.baidu.com";
 8 
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.fragment_main);
13         nfcAdapter = NfcAdapter.getDefaultAdapter(this);
14         pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
15                 getClass()), 0);
16 
17     }
18 
19     @Override
20     protected void onResume() {
21         // TODO Auto-generated method stub
22         super.onResume();
23         // 获得焦点, 设置这个窗口优先级高于所有可以处理NFC的窗口
24         if (nfcAdapter != null) {
25             nfcAdapter
26                     .enableForegroundDispatch(this, pendingIntent, null, null);
27 
28         }
29     }
30 
31     @Override
32     protected void onPause() {
33         // TODO Auto-generated method stub
34 
35         super.onPause();
36         // 程序退出,窗口恢复默认
37         if (nfcAdapter != null) {
38             nfcAdapter.disableForegroundDispatch(this);
39         }
40     }
41 
42     @Override
43     protected void onNewIntent(Intent intent) {
44         // 当清单文件中设置为"singleTop"时,oncreate()只调用一次,而onNewIntent()每次调用
45         // TODO Auto-generated method stub
46         super.onNewIntent(intent);
47 
48         // 第一步获得Tag
49         Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
50         // 第二步写入标签
51         writeNFCTag(detectedTag);
52 
53     }
54 
55     private void writeNFCTag(Tag tag) {
56         // TODO Auto-generated method stub
57 
58         if (tag == null) {
59             return;
60         }
61         NdefMessage ndefMessage = new NdefMessage(
62                 new NdefRecord[] { NdefRecord.createUri(Uri.parse(url)) });
63         int size = ndefMessage.toByteArray().length;
64         try {
65             Ndef ndef = Ndef.get(tag);
66             if (ndef != null) {
67                 ndef.connect();
68                 // 是否支持可写
69                 if (!ndef.isWritable()) {
70                     return;
71 
72                 }
73                 // 判断是否可以容纳要写入的数据
74                 if (ndef.getMaxSize() < size) {
75                     return;
76                 }
77                 ndef.writeNdefMessage(ndefMessage);
78                 Toast.makeText(this, "NFC成功写入", 0).show();
79             } else {
80                 // 新买的NFC需要格式化---》格式化NFSC
81                 NdefFormatable format = NdefFormatable.get(tag);
82                 if (format != null) {
83                     format.connect();
84                     format.format(ndefMessage);// 既格式化了又写入内容
85                     Toast.makeText(this, "NFC成功格式化", 0).show();
86                 } else {
87                     Toast.makeText(this, "NFC格式化失败", 0).show();
88                 }
89 
90             }
91         } catch (Exception e) {
92             // TODO: handle exception
93         }
94     }
95 
96 }

 

 

以上是关于android手机中如何写入NFC程序?怎样能读到一张卡的主要内容,如果未能解决你的问题,请参考以下文章

小米手机怎样设置nfc替代车钥匙

安卓手机怎么实现nfc导航

如何在android中测量NFC RSSI?

如何在靠近 NFC(智能卡)时停止我的 Android NFC 应用程序循环

使用 NFC 的 iPhone 到 iPhone 数据传输

Android 10 NFC 应用程序 - 在 MS Intune Kiosk 模式下手机睡眠时停止工作