`
810364804
  • 浏览: 819786 次
文章分类
社区版块
存档分类
最新评论

NFC写Uri进Tag,与识别Tag

 
阅读更多

自己写段程序写Uri进Tag,很简单:

import java.io.IOException;
import java.nio.charset.Charset;

import android.content.Context;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.Tag;
import android.nfc.TagLostException;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.widget.Toast;

public class NFC {
	
	public static boolean writeTag(Context context, Tag tag) {    
		
	    NdefRecord relayRecord = new NdefRecord(
	    	    NdefRecord.TNF_ABSOLUTE_URI ,
	    	    "zoeice://com.zoeice.example/applicationUp".getBytes(Charset.forName("US-ASCII")),
	    	    new byte[0], new byte[0]);
	 
	    // Complete NDEF message with both records
	    NdefMessage message = new NdefMessage(new NdefRecord[] {relayRecord});
	 
	    try {
	        // If the tag is already formatted, just write the message to it
	        Ndef ndef = Ndef.get(tag);
	        if(ndef != null) {
	            ndef.connect();
	 
	            // Make sure the tag is writable
	            if(!ndef.isWritable()) {
	            	 Toast.makeText(context, "nfcReadOnlyErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            }
	 
	            // Check if there's enough space on the tag for the message
	            int size = message.toByteArray().length;
	            if(ndef.getMaxSize() < size) {
	            	Toast.makeText(context, "nfcReadOnlyErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            }
	 
	            try {
	                // Write the data to the tag
	                ndef.writeNdefMessage(message);
	 
	                Toast.makeText(context, "nfcWrittenTitle", Toast.LENGTH_SHORT ).show();
	                return true;
	            } catch (TagLostException tle) {
	            	 Toast.makeText(context, "nfcTagLostErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            } catch (IOException ioe) {
	            	 Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            } catch (FormatException fe) {
	            	 Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            }
	        // If the tag is not formatted, format it with the message
	        } else {
	            NdefFormatable format = NdefFormatable.get(tag);
	            if(format != null) {
	                try {
	                    format.connect();
	                    format.format(message);
	 
	                    Toast.makeText(context, "nfcWrittenTitle", Toast.LENGTH_SHORT ).show();
	                    return true;
	                } catch (TagLostException tle) {
	                	 Toast.makeText(context, "nfcTagLostErrorTitle", Toast.LENGTH_SHORT ).show();
	                    return false;
	                } catch (IOException ioe) {
	                	 Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
	                    return false;
	                } catch (FormatException fe) {
	                	 Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
	                    return false;
	                }
	            } else {
	            	 Toast.makeText(context, "nfcNoNdefErrorTitle", Toast.LENGTH_SHORT ).show();
	                return false;
	            }
	        }
	    } catch(Exception e) {
	    	 Toast.makeText(context, "nfcUnknownErrorTitle", Toast.LENGTH_SHORT ).show();
	    }
	 
	    return false;
	}
}


然后再activity中重写:

@Override
       protected void onNewIntent(Intent intent){
           if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())){
               mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
               NFC.writeTag(ctx, mytag);
               Toast.makeText(this, "ok_detection" + mytag.toString(), Toast.LENGTH_LONG ).show();
           }
       }

识别Tag的方法是在AndroidManifest.xml中加入:

<activity android:name="com.carcon.navi.naviscreen.NaviViewManager"  android:launchMode="singleTask" >
           <intent-filter>
                  <action android:name="android.intent.action.MAIN"></action>
                     <category android:name="android.intent.category.LAUNCHER"></category>
              </intent-filter>
              <intent-filter>
                     <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                     <category android:name="android.intent.category.DEFAULT" />
                     <data android:scheme="zoeice"  android:host="com.zoeice.example"  android:path="/applicationUp"/>
              </intent-filter>
</activity>     



分享到:
评论

相关推荐

    12、NFC技术:读写NFC标签中的Uri数据

    这里需要注意,不是所有NFC标签都支持写入操作,需要确保标签是可写的,并且有足够的空间存储数据。 在开发过程中,可以使用Android的`Tag`类获取关于NFC标签的更多信息,如ID、类型等。此外,为了提供更好的用户...

    NFC Forum Specification

    NFCForum-TS-RTD_URI_1.0.pdf NFCForum-TS-Signature_RTD-1.0.pdf 04. Reference Application Technical Specifications NFCForum-TS-ConnectionHandover_1_2.pdf 05. Protocol Technical Specifications NFC...

    NFC fourm doc

    NFC URI Record Type Definition Technical Specification.pdf NFCForum-TS-ConnectionHandover-1.3.pdf NFCForum-TS-DigitalProtocol-1_1.pdf NFCForum-TS-LLCP-1_2.pdf NFCForum-TS-Type-2-Tag_1.2.pdf Simple ...

    android NFC读写

    - **`Tag`**:表示一个物理NFC标签,包含了与该标签相关的NFC技术类型和标识信息。 - **`NdefMessage`**:用于封装一组NDEF记录,每个记录可以包含不同类型的数据。 - **`NdefRecord`**:代表一个NDEF记录,包含了...

    NFC读写标签Demo

    在这个“NFC读写标签Demo”中,我们探讨的是如何通过Android应用程序实现对NFC标签的读取与写入功能,尤其侧重于NDEF(NFC Data Exchange Format)格式的应用。 NDEF是一种标准化的数据交换格式,它允许不同的设备...

    Android NFC 写URL

    Log.e("NFC", "Error writing to tag", e); Toast.makeText(this, "无法写入标签", Toast.LENGTH_SHORT).show(); } } ``` 6. **处理权限请求** Android 6.0及以上版本需要运行时权限,确保在`AndroidManifest...

    Android设备读写NFC标签Demo

    Android SDK提供了`NfcManager`类,它是与NFC硬件交互的主要接口。通过`getSystemService(NFC_SERVICE)`方法可以获取到`NfcManager`实例。此外,我们还需要`Ndef`类来处理NDEF(NFC Data Exchange Format)数据,这...

    NFC规范(NFC Forum Specifications)

    NFC论坛定义了一系列标准类型,如文本、URI、智能海报(Smart Poster,包含多个动作,如跳转到网站、拨打电话等)等,同时允许扩展自定义类型。 3. **技术协议(Technology Protocols)**:NFC支持多种通信模式,如...

    Android 使用手机NFC的读取NFC标签数据

    在读/写模式下,Android设备可以读取或写入NDEF(NFC数据交换格式)消息到NFC标签。 要实现Android应用的NFC读取功能,需要进行以下步骤: 1. **启用NFC权限**: 在AndroidManifest.xml文件中添加以下权限: ```...

    nfc读写demo

    开发者可以使用`NfcAdapter`来管理NFC的读写操作,`Tag`对象表示与设备交互的物理NFC标签,`Ndef`类则用于处理NDEF格式的数据。 2. **读取NDEF标签**:应用可以通过`NfcAdapter.enableReaderMode()`开启读取模式,...

    利用NFC开发的wifi连接和文件传输app .zip

    NFC,Near Field Communication,近场通信技术,基于RFID理论,将非接触式读卡器、非接触卡和点对点功能整合进一块单芯片 NFC工作原理同RFID 相似,利用频谱中无线频率的电磁感应耦合方式传递信息,现只工作在13.56...

    Android NFC 读卡demo

    总的来说,这个"Android NFC 读卡demo"涵盖了Android开发中与NFC相关的基础内容,包括权限配置、广播接收器、读者模式、卡片技术识别以及扇区数据读取。通过学习和实践这个示例,开发者可以掌握如何在Android应用中...

    NFC协议大全.rar

    Tag1、Tag2、Tag3和Tag4代表了不同的NFC标签类型,它们基于不同的技术标准,如ISO/IEC 14443、FeliCa等。这些标签具有不同的存储容量、数据传输速度和安全性特性。理解不同类型的NFC标签有助于选择适合特定应用场景...

    nfc_NFC技术_java_nfc读卡源码_NFC_

    NFC(Near Field Communication,近场通信)技术是一种短距离无线通信技术,它结合了非接触式射频识别(RFID)与互连技术,旨在简化数据交换、设备配对和移动支付等任务。NFC在日常生活中广泛应用于手机、智能卡、...

    NFCTAG标签--NFCModelC

    2. **支付与票务**:NFC标签可以用于无接触支付,如Apple Pay、Google Pay,以及公共交通的电子票务。 3. **设备配对**:NFC可以快速建立蓝牙或Wi-Fi连接,简化设备之间的配对过程。 4. **信息交换**:用户可以通过...

    NFC标签读取和写入数据demo,亲测可用

    首先,需要获取到系统的NFC适配器,然后监听`ACTION_TAG_DISCOVERED`意图,当标签靠近设备时,会触发对应的回调函数,从中可以获取标签的信息。 4. **写入NFC标签**: 写入数据到NDEF(NFC Data Exchange Format)...

    NFC_NFCARD读取软件_NFC_

    NFC(Near Field Communication,近场通信)是一种短距离无线通信技术,源于非接触式射频识别(RFID)。这项技术允许电子设备在极近的距离内进行数据交换,通常在4厘米(1.5英寸)的范围内。NFC在移动支付、门禁控制...

    android NFC读取源码

    5. **Tag** 类:代表一个物理NFC标签,提供了与标签交互的方法,如读取或写入数据。 现在,我们来看一下`nfc-reader-master`项目中的关键代码片段: 1. **初始化NFC**: 在活动中,首先获取`NfcAdapter`,并检查...

    NFCRunAPP_nfc触碰配网_NFC_android_

    开发者可以通过Android的API,如NFCAdapter和NFCTag类,来编写与NFC相关的应用。 在"Android NFC应用:触碰NFC标签打开设置的应用"这个场景下,NFCRunAPP可能包含以下关键知识点: 1. **NDEF(NFC Data Exchange ...

    Android NFC操作大全

    7. **NDEF Tag Operations API**:Android 4.4(KitKat)引入了Tag Operations API,简化了与不同类型的NFC标签交互的过程。开发者可以使用这个API来识别标签类型,执行特定于标签的操作,如读写Mifare Classic或...

Global site tag (gtag.js) - Google Analytics