NFC标签初始化、NFC标签读写数据功能、NFC标签前台调度系统

【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:
[java]   view plain   copy
  1. <uses-feature  
  2.         android:name="android.hardware.nfc"  
  3.         android:required="true" />  
  4.   
  5.     <uses-permission android:name="android.permission.NFC" />  

步骤二:在Activity标签中声明识别NFC标签:
[java]   view plain   copy
  1. <activity android:name=".Activity.Main.ReadActivity">  
  2.     <intent-filter>  
  3.         <action android:name="android.nfc.action.TAG_DISCOVERED" />  
  4.   
  5.         <category android:name="android.intent.category.DEFAULT" />  
  6.   
  7.         <data android:mimeType="*/*" />  
  8.     </intent-filter>  
  9. </activity>  
步骤三:由于每个Activity中都要初始化NFC设置和读写NFC标签,所以我把它们都封装成静态方法:
[java]   view plain   copy
  1. public class NfcDao {  
  2.   
  3.     //nfc  
  4.     public static NfcAdapter mNfcAdapter;  
  5.     public static IntentFilter[] mIntentFilter = null;  
  6.     public static PendingIntent mPendingIntent = null;  
  7.     public static String[][] mTechList = null;  
  8.   
  9.     /** 
  10.      * 构造函数 
  11.      */  
  12.     public NfcDao(Activity activity) {  
  13.         mNfcAdapter = NfcCheck(activity);  
  14.         NfcInit(activity);  
  15.     }  
  16.   
  17.     /** 
  18.      * 检查NFC是否打开 
  19.      */  
  20.     public static NfcAdapter NfcCheck(Activity activity) {  
  21.         NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);  
  22.         if (mNfcAdapter == null) {  
  23.             return null;  
  24.         } else {  
  25.             if (!mNfcAdapter.isEnabled()) {  
  26.                 Intent setNfc = new Intent(Settings.ACTION_NFC_SETTINGS);  
  27.                 activity.startActivity(setNfc);  
  28.             }  
  29.         }  
  30.         return mNfcAdapter;  
  31.     }  
  32.   
  33.     /** 
  34.      * 初始化nfc设置 
  35.      */  
  36.     public static void NfcInit(Activity activity) {  
  37.         mPendingIntent = PendingIntent.getActivity(activity, 0new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);  
  38.         IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);  
  39.         IntentFilter filter2 = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);  
  40.         try {  
  41.             filter.addDataType("*/*");  
  42.         } catch (IntentFilter.MalformedMimeTypeException e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.         mIntentFilter = new IntentFilter[]{filter, filter2};  
  46.         mTechList = null;  
  47.     }  
  48.   
  49.     /**  
  50.      * 读nfc数据  
  51.      */  
  52.     public static String readFromTag(Intent intent) throws UnsupportedEncodingException {  
  53.         Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);  
  54.         if (rawArray != null) {  
  55.             NdefMessage mNdefMsg = (NdefMessage) rawArray[0];  
  56.             NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];  
  57.             if (mNdefRecord != null) {  
  58.                 String readResult = new String(mNdefRecord.getPayload(), "UTF-8");  
  59.                 return readResult;  
  60.             }  
  61.         }  
  62.         return "";  
  63.     }  
  64.   
  65.   
  66.     /** 
  67.      * 写nfc数据 
  68.      */  
  69.     public static void writeToTag(String data, Intent intent) throws IOException, FormatException {  
  70.         Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  
  71.         Ndef ndef = Ndef.get(tag);  
  72.         ndef.connect();  
  73.         NdefRecord ndefRecord = NdefRecord.createTextRecord(null, data);  
  74.         NdefRecord[] records = {ndefRecord};  
  75.         NdefMessage ndefMessage = new NdefMessage(records);  
  76.         ndef.writeNdefMessage(ndefMessage);  
  77.     }  
  78.   
  79.     /** 
  80.      * 读nfcID 
  81.      */  
  82.     public static String readIdFromTag(Intent intent) throws UnsupportedEncodingException {  
  83.         Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  
  84.         String id = ByteArrayToHexString(tag.getId());  
  85.         return id;  
  86.     }  
  87.   
  88.     /** 
  89.      * 将字节数组转换为字符串 
  90.      */  
  91.     private static String ByteArrayToHexString(byte[] inarray) {  
  92.         int i, j, in;  
  93.         String[] hex = {"0""1""2""3""4""5""6""7""8""9""A""B""C""D""E""F"};  
  94.         String out = "";  
  95.   
  96.         for (j = 0; j < inarray.length; ++j) {  
  97.             in = (int) inarray[j] & 0xff;  
  98.             i = (in >> 4) & 0x0f;  
  99.             out += hex[i];  
  100.             i = in & 0x0f;  
  101.             out += hex[i];  
  102.         }  
  103.         return out;  
  104.     }  
  105. }  
步骤四:在ReadActivity代码中的使用、使用标签的前台调度系统:
[java]   view plain   copy
  1. @Override  
  2. public void initData() {  
  3.     //nfc初始化设置  
  4.     NfcDao dao = new NfcDao(this);  
  5. }  
[java]   view plain   copy
  1. @Override  
  2. protected void onResume() {  
  3.     super.onResume();  
  4.     //开启前台调度系统  
  5.     NfcDao.mNfcAdapter.enableForegroundDispatch(this, NfcDao.mPendingIntent, NfcDao.mIntentFilter, NfcDao.mTechList);  
  6. }  
  7.   
  8. @Override  
  9. protected void onPause() {  
  10.     super.onPause();  
  11.     //关闭前台调度系统  
  12.     NfcDao.mNfcAdapter.disableForegroundDispatch(this);  
  13. }  
[java]   view plain   copy
  1. @Override  
  2. protected void onNewIntent(Intent intent) {  
  3.     super.onNewIntent(intent);  
  4.     //当该Activity接收到NFC标签时,运行该方法  
  5.     //调用工具方法,读取到的NFC数据  
  6.     String str = dao.rendFromTag(intent);  
  7. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值