【NFC】Android NFC API Reference中英文
android 直接打开 NFC 设置页面
Settings::: import android.provider.Settings; 要导入这个包 不要导入其他的。
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
多个demo下载
http://download.csdn.net/download/qq_32011119/10248638
步骤一:在manifests文件中声明使用NFC:
- <uses-feature
- android:name="android.hardware.nfc"
- android:required="true" />
- <uses-permission android:name="android.permission.NFC" />
步骤二:在Activity标签中声明识别NFC标签:
- <activity android:name=".Activity.Main.ReadActivity">
- <intent-filter>
- <action android:name="android.nfc.action.TAG_DISCOVERED" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="*/*" />
- </intent-filter>
- </activity>
步骤三:由于每个Activity中都要初始化NFC设置和读写NFC标签,所以我把它们都封装成静态方法:
- public class NfcDao {
- //nfc
- public static NfcAdapter mNfcAdapter;
- public static IntentFilter[] mIntentFilter = null;
- public static PendingIntent mPendingIntent = null;
- public static String[][] mTechList = null;
- /**
- * 构造函数
- */
- public NfcDao(Activity activity) {
- mNfcAdapter = NfcCheck(activity);
- NfcInit(activity);
- }
- /**
- * 检查NFC是否打开
- */
- public static NfcAdapter NfcCheck(Activity activity) {
- NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
- if (mNfcAdapter == null) {
- return null;
- } else {
- if (!mNfcAdapter.isEnabled()) {
- Intent setNfc = new Intent(Settings.ACTION_NFC_SETTINGS);
- activity.startActivity(setNfc);
- }
- }
- return mNfcAdapter;
- }
- /**
- * 初始化nfc设置
- */
- public static void NfcInit(Activity activity) {
- mPendingIntent = PendingIntent.getActivity(activity, 0, new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
- IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
- IntentFilter filter2 = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
- try {
- filter.addDataType("*/*");
- } catch (IntentFilter.MalformedMimeTypeException e) {
- e.printStackTrace();
- }
- mIntentFilter = new IntentFilter[]{filter, filter2};
- mTechList = null;
- }
- /**
- * 读nfc数据
- */
- public static String readFromTag(Intent intent) throws UnsupportedEncodingException {
- Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
- if (rawArray != null) {
- NdefMessage mNdefMsg = (NdefMessage) rawArray[0];
- NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];
- if (mNdefRecord != null) {
- String readResult = new String(mNdefRecord.getPayload(), "UTF-8");
- return readResult;
- }
- }
- return "";
- }
- /**
- * 写nfc数据
- */
- public static void writeToTag(String data, Intent intent) throws IOException, FormatException {
- Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- Ndef ndef = Ndef.get(tag);
- ndef.connect();
- NdefRecord ndefRecord = NdefRecord.createTextRecord(null, data);
- NdefRecord[] records = {ndefRecord};
- NdefMessage ndefMessage = new NdefMessage(records);
- ndef.writeNdefMessage(ndefMessage);
- }
- /**
- * 读nfcID
- */
- public static String readIdFromTag(Intent intent) throws UnsupportedEncodingException {
- Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- String id = ByteArrayToHexString(tag.getId());
- return id;
- }
- /**
- * 将字节数组转换为字符串
- */
- private static 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;
- }
- }
步骤四:在ReadActivity代码中的使用、使用标签的前台调度系统:
- @Override
- public void initData() {
- //nfc初始化设置
- NfcDao dao = new NfcDao(this);
- }
- @Override
- protected void onResume() {
- super.onResume();
- //开启前台调度系统
- NfcDao.mNfcAdapter.enableForegroundDispatch(this, NfcDao.mPendingIntent, NfcDao.mIntentFilter, NfcDao.mTechList);
- }
- @Override
- protected void onPause() {
- super.onPause();
- //关闭前台调度系统
- NfcDao.mNfcAdapter.disableForegroundDispatch(this);
- }
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- //当该Activity接收到NFC标签时,运行该方法
- //调用工具方法,读取到的NFC数据
- String str = dao.rendFromTag(intent);
- }