【Android -- 读取NFC卡号】历览千载书,时时见遗烈。这篇文章主要讲述Android -- 读取NFC卡号相关的知识,希望能为你提供帮助。
1. menifest文件中需要添加:
< uses-permission android:name=" android.permission.NFC" /> < uses-feature android:name=" android.hardware.nfc" android:required=" true" />
在activity中添加:
< intent-filter> < action android:name=" android.nfc.action.TAG_DISCOVERED" /> < category android:name=" android.intent.category.DEFAULT" /> < /intent-filter>
2. 初始化时代码:
Intent nfcIntent = new Intent(this, getClass()); nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); mPendingIntent = PendingIntent.getActivity(this, 0,nfcIntent , 0); mAdapter = NfcAdapter.getDefaultAdapter(this); if (mAdapter == null) { Toast.makeText(getApplicationContext(), " NFC feature is supported on this device." , Toast.LENGTH_SHORT).show(); return; }
需要Override的函数:
private NfcAdapter mAdapter; private PendingIntent mPendingIntent; @TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) protected void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); }@Override protected void onNewIntent(Intent intent){ getTagInfo(intent); } @TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) private void getTagInfo(Intent intent) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] tagId = tag.getId(); String str = ByteArrayToHexString(tagId); str = flipHexStr(str); Long cardNo = Long.parseLong(str, 16); String ignoreOperationId = m_operationid; if(m_isOnline){ // if select all , pass in the operation id encoded in ticket // there should NOT be many operations, take the only onenew CardValidationAsyncTask().execute(cardNo.toString()); } }@TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) @Override protected void onPause() { super.onPause(); if (mAdapter != null) { mAdapter.disableForegroundDispatch(this); } }
以下为helper函数:
private String flipHexStr(String s){ StringBuilderresult = new StringBuilder(); for (int i = 0; i < =s.length()-2; i=i+2) { result.append(new StringBuilder(s.substring(i,i+2)).reverse()); } return result.reverse().toString(); }private String ByteArrayToHexString(byte[] inarray) { int i, j, in; String[] hex = { " 0" , " 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" , " A" , " B" , " C" , " D" , " E" , " F" }; String out = " " ; for (j = 0; j < inarray.length; ++j) { in = (int) inarray[j] & 0xff; i = (in > > 4) & 0x0f; out += hex[i]; i = in & 0x0f; out += hex[i]; } return out; }
推荐阅读
- Android6.0M权限管理实战,完美轻量级封装
- Android -- 打开时隐藏软键盘
- android - asynTask中打开多选alertDialog
- Android消息的提示,Toast吐司方式
- 我的Android第三章(Android的组件介绍)
- Android端上传图片到后台,存储到数据库中 详细代码
- [Android Pro]Android TypedValue.applyDimension()的用法
- Android中土司(Toast)的使用
- 如何从给定的中序和先序遍历中打印后序遍历()