`
cyhcheng
  • 浏览: 60285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

向Tag写入数据

 
阅读更多
  • 授权:

    <uses-permission android:name="android.permission.NFC" />

  • 在Activity中检测移动设备是否支持NFC

        android.nfc.NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        if (nfcAdapter == null); //This device doesn't support NFC!

  • 检测移动设备是否打开NFC功能,如果没有打开,跳转到setting page

       if (!nfcAdapter.isEnabled()) {
            final Intent openTagIntent = new Intent(Settings.ACTION_NFC_SETTINGS);
            openTagIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            startActivity(openTagIntent);         
        }

 

  • 在onNewIntent方法中初始化要写入数据的tagandroid.nfc.Tag tag =  intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  • 写入数据

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button btnOperateTag;
    private EditText editTagMessage;
    private NfcAdapter adapter;
    private PendingIntent pendingIntent;
    private Tag mytag;
    private IntentFilter writeTagFilters[];
    private Context context;

    private static final String tag = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = getApplicationContext();

        btnOperateTag = (Button) findViewById(R.id.btn_operate_tag);
        editTagMessage = (EditText) findViewById(R.id.edit_message);
        adapter = NfcAdapter.getDefaultAdapter(this);
        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
        writeTagFilters = new IntentFilter[] { tagDetected };
        btnOperateTag.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                String message = editTagMessage.getText().toString();
                if (message.trim().length() < 4) {
                    Toast.makeText(context, "Please enter more than 3 characters.", Toast.LENGTH_LONG).show();
                } else {
                    try {
                        if (mytag == null) {
                            Toast.makeText(context, "Tag Not Detected. Where Do You Want Write?", Toast.LENGTH_SHORT).show();
                        } else {
                            write(message, mytag);
                            Toast.makeText(context, "I Have Written Your First Tag!", Toast.LENGTH_SHORT).show();
                        }
                    } catch (IOException e) {
                        Toast.makeText(context, "Error During Writing. Are You Sure That Your Tag Is Close To Your Mobile Phone?", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    } catch (FormatException e) {
                        Toast.makeText(context, "A invalid format.", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                }
            }
        });
        Log.d(tag, "-------------Create-----------------");
    }

    @Override
    protected void onNewIntent(Intent intent) {
        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())
                || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
            mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            if (mytag != null) {
                Toast.makeText(context, mytag.toString(), Toast.LENGTH_SHORT).show();
                if(btnOperateTag != null){
                    btnOperateTag.setEnabled(true);
                }
            }
            Log.d(tag, "-------------New Inent-----------------");
        }
    }

    private NdefRecord createRecord(String text) throws UnsupportedEncodingException {
        String lang = "en";
        byte[] textBytes = text.getBytes();
        byte[] langBytes = lang.getBytes("UTF-8");
        int langLength = langBytes.length;
        int textLength = textBytes.length;   
        byte[] payload = new byte[1 + langLength + textLength];

        // set status byte (see NDEF spec for actual bits)
        payload[0] = (byte) langLength;

        // copy langbytes and textbytes into payload
        System.arraycopy(langBytes, 0, payload, 1, langLength);
        System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);

        NdefRecord recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload);

        return recordNFC;
    }

    private void write(String text, Tag tag) throws IOException, FormatException {

        NdefRecord[] records = { createRecord(text) };
        NdefMessage message = new NdefMessage(records);
        // Get an instance of Ndef for the tag.
        Ndef ndef = Ndef.get(tag);
        if (ndef != null) {
            // Enable I/O
            ndef.connect();
            // Write the message
            ndef.writeNdefMessage(message);
            // Close the connection
            ndef.close();
        } else {
            NdefFormatable format = NdefFormatable.get(tag);
            if (format != null) {
                try {
                    format.connect();
                    format.format(message);
                    Log.e(this.tag,"Formatted tag and wrote message");

                } catch (IOException e) {
                    Log.e(this.tag,"Failed to format tag.");
                }
            } else {
                Log.e(this.tag,"Tag doesn't support NDEF.");
            }
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        WriteModeOff();
    }

    @Override
    public void onResume() {
        super.onResume();
        WriteModeOn();
    }

    private void WriteModeOn() {   
        adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, null);
    }

    private void WriteModeOff() {
        adapter.disableForegroundDispatch(this);
    }
}

 

分享到:
评论

相关推荐

    KEPServerEX数据写入数据库案例.pdf

    例如,创建一个名为ch1tag1的Link Tag,将Channel1的Tag1数据写入数据库的tag1value字段。 通过以上步骤,KEPServerEX成功地实现了将OPC数据实时写入数据库的功能,为工厂自动化、数据分析或远程监控提供了强大的...

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

    在这个“NFC标签读取和写入数据demo”中,我们将深入探讨如何利用NFC技术进行数据交互。 1. **NFC基本原理**: NFC工作在13.56MHz频率,有效距离通常在4厘米以内。它结合了射频识别(RFID)技术和互连技术,可以...

    Access数据库数据写入WinCC变量.pdf

    现在,我们可以从记录集中提取数据,并将其写入WinCC变量U16Tag1中。 lngCount = objRecordset.Fields.Count If (lngCount &gt; 0) Then objRecordset.MoveFirst lngValue = objRecordset.Fields(0).Value ...

    android 实现Nfc数据读取和写入

    5. **写入NFC数据**: 要向NDEF标签写入数据,首先需要创建一个`NdefMessage`,包含一个或多个`NdefRecord`。每个`NdefRecord`包含类型、标识符和数据。然后,使用`Ndef`对象的`makeReadOnly()`方法确保标签在写入后...

    Android 实现了NFC编程,能实现对IC卡的写入、数据读取等操作

    对于写入数据,同样需要连接到IC卡,然后选择正确的分区,最后调用相应的方法写入数据。例如,在MIFARE Classic中,可以使用`writeBlock(int blockNumber, byte[] data)`方法写入数据块。需要注意的是,写入操作可能...

    AB PLC以太网ControlLogixTCP_TAG.DLL,abplc以太网连接电脑,C#

    在`ControlLogixTCP_TAG.DLL`中,你可以找到处理这些标签的函数,例如`ReadTag`和`WriteTag`,它们允许你从PLC读取数据或向PLC写入数据。 在实际应用中,`ABPLCTCP`库通常被用于实现以下功能: 1. 实时监控:读取...

    C# Dicom文件解析获取Tag数据

    在DICOM文件中,数据元素以Tag的形式存在,包含关键字、数据类型和值。 要使用FO-DICOM解析DICOM文件,你需要先安装FO-DICOM库。可以通过NuGet包管理器在C#项目中添加"FO-DICOM"依赖。一旦安装成功,你可以创建一个...

    libid3tag MP3 TAG库

    总之,libid3tag库是MP3文件元数据处理的重要工具,通过其提供的API,开发者可以轻松地读取、编辑和管理MP3文件中的ID3标签,从而提升音频应用的功能和用户体验。无论是在个人项目还是商业产品中,libid3tag都能发挥...

    TIFF数据格式实例分析

    5. 最后,可能涉及到将解析后的数据重新写入TIFF文件,或以其他格式(如JPEG、PNG)导出。 五、应用与拓展 TIFF格式在专业领域有广泛应用,例如: - 扫描仪和相机经常使用TIFF存储未压缩的原始图像,以保留最高质量...

    Android 将信息写入一张NFC卡

    2. **读写操作**:包括读取NFC标签上的信息以及向NFC标签写入数据。 3. **前端界面交互**:用于显示读取的数据或接收用户输入的数据。 #### Android NFC编程实例分析 下面我们将通过一个具体的代码示例来详细了解...

    android 写入SDcard 文件

    在Android平台上,对SDCard(外部存储)进行文件操作是应用程序与用户交互的重要部分,尤其对于需要存储大量数据或媒体文件的应用来说。本教程将详细解释如何在Android中读写SDCard文件,非常适合初学者入门。 首先...

    Android XML 解析 写入

    在这个例子中,`xmlDocument`是已经构建好的`Document`对象,包含要写入的XML数据。 ### 4. 注意事项 - 当处理XML时,确保正确处理编码问题,避免乱码。 - 在解析XML时,务必检查标签名称的大小写,因为XML是区分...

    Python写入数据到MP3文件中的方法

    本篇主要介绍如何使用Python将数据写入MP3文件的ID3标签中,即ID3V1数据段。ID3标签是一种标准化的元数据容器,用于存储关于MP3文件的信息。 首先,我们定义一个字典`writeMp3Header`来存放待写入的元数据,包括`...

    android nfc写入

    2. `NdefMessage`: 包含一个或多个`NdefRecord`,代表要写入到NFC标签的数据。 3. `NdefRecord`: 存储单个数据项,包含类型、ID和数据三部分。 三、创建NFC写入应用 1. 添加权限:在AndroidManifest.xml中添加`NFC`...

    将图像导出到选定数据类型的 TIF 或 TIFF 文件:对 IMWRITE 的补充,用于写入超出 int16 数据类型的 TIF 文件。-matlab开发

    IMWRITE2TIF 将图像写入... IMWRITE2TIF(IMGDATA,HEADER,IMFILE,DATATYPE,TAG NAME1,TAG VALUE1,TAG NAME2,TAG VALUE2, ...) 使用指定的 Matlab 支持的 TIF 标签值写入。 这些新标签值会覆盖 HEADER 中已定义的值。 注

    NFC Forum Type 2-Tag 原文+翻译

    `NdefFormatable`接口则用于对未格式化的Type 2-Tag进行初始化和数据写入。通过`Tag`对象,开发者可以获取Tag的详细信息,并使用`TagTechnology`子类如`MifareClassic`或`Ndef`进行具体操作。 **5. 应用场景** ...

    基于Python的批量为电商数据添加tag标签.zip

    在这个项目中,可能涉及到读取电商数据文件(如CSV或JSON),并将其内容处理后写入带有tag标签的新文件。 4. **数据清洗**:在处理实际数据时,数据清洗是非常重要的步骤。这可能包括处理缺失值、异常值、重复值,...

    Proface触摸屏中文Tag手册

    4. **编程接口**:在Proface触摸屏中,开发者可以通过编程接口(如PLC通讯协议)来读取和写入Tag,实现对设备的控制和监控。 **Tag的使用方法** 1. **创建与编辑**:用户可以在触摸屏的配置软件中创建新的Tag,...

    批量修改MP3 Tag

    MP3 TAG是音频文件MP3中的元数据,用于存储关于音乐曲目的信息,如艺术家、专辑、歌曲名称、年份、流派等。批量修改MP3 TAG对于整理和管理大量音乐文件非常有用,尤其当你从不同来源获取音乐,且它们的TAG信息不统一...

    wmamp3文件标题艺术家等tag属性读写类

    本话题主要关注C++编程中对WMA(Windows Media Audio)和MP3文件的元数据(Tag)进行读取和写入的类库实现。 标题“wmamp3文件标题艺术家等tag属性读写类”指出这是一个专门针对WMA和MP3文件的类库,用于处理音频...

Global site tag (gtag.js) - Google Analytics