- 授权:
<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);
}
}
相关推荐
例如,创建一个名为ch1tag1的Link Tag,将Channel1的Tag1数据写入数据库的tag1value字段。 通过以上步骤,KEPServerEX成功地实现了将OPC数据实时写入数据库的功能,为工厂自动化、数据分析或远程监控提供了强大的...
在这个“NFC标签读取和写入数据demo”中,我们将深入探讨如何利用NFC技术进行数据交互。 1. **NFC基本原理**: NFC工作在13.56MHz频率,有效距离通常在4厘米以内。它结合了射频识别(RFID)技术和互连技术,可以...
现在,我们可以从记录集中提取数据,并将其写入WinCC变量U16Tag1中。 lngCount = objRecordset.Fields.Count If (lngCount > 0) Then objRecordset.MoveFirst lngValue = objRecordset.Fields(0).Value ...
5. **写入NFC数据**: 要向NDEF标签写入数据,首先需要创建一个`NdefMessage`,包含一个或多个`NdefRecord`。每个`NdefRecord`包含类型、标识符和数据。然后,使用`Ndef`对象的`makeReadOnly()`方法确保标签在写入后...
对于写入数据,同样需要连接到IC卡,然后选择正确的分区,最后调用相应的方法写入数据。例如,在MIFARE Classic中,可以使用`writeBlock(int blockNumber, byte[] data)`方法写入数据块。需要注意的是,写入操作可能...
在`ControlLogixTCP_TAG.DLL`中,你可以找到处理这些标签的函数,例如`ReadTag`和`WriteTag`,它们允许你从PLC读取数据或向PLC写入数据。 在实际应用中,`ABPLCTCP`库通常被用于实现以下功能: 1. 实时监控:读取...
在DICOM文件中,数据元素以Tag的形式存在,包含关键字、数据类型和值。 要使用FO-DICOM解析DICOM文件,你需要先安装FO-DICOM库。可以通过NuGet包管理器在C#项目中添加"FO-DICOM"依赖。一旦安装成功,你可以创建一个...
总之,libid3tag库是MP3文件元数据处理的重要工具,通过其提供的API,开发者可以轻松地读取、编辑和管理MP3文件中的ID3标签,从而提升音频应用的功能和用户体验。无论是在个人项目还是商业产品中,libid3tag都能发挥...
5. 最后,可能涉及到将解析后的数据重新写入TIFF文件,或以其他格式(如JPEG、PNG)导出。 五、应用与拓展 TIFF格式在专业领域有广泛应用,例如: - 扫描仪和相机经常使用TIFF存储未压缩的原始图像,以保留最高质量...
2. **读写操作**:包括读取NFC标签上的信息以及向NFC标签写入数据。 3. **前端界面交互**:用于显示读取的数据或接收用户输入的数据。 #### Android NFC编程实例分析 下面我们将通过一个具体的代码示例来详细了解...
在Android平台上,对SDCard(外部存储)进行文件操作是应用程序与用户交互的重要部分,尤其对于需要存储大量数据或媒体文件的应用来说。本教程将详细解释如何在Android中读写SDCard文件,非常适合初学者入门。 首先...
在这个例子中,`xmlDocument`是已经构建好的`Document`对象,包含要写入的XML数据。 ### 4. 注意事项 - 当处理XML时,确保正确处理编码问题,避免乱码。 - 在解析XML时,务必检查标签名称的大小写,因为XML是区分...
本篇主要介绍如何使用Python将数据写入MP3文件的ID3标签中,即ID3V1数据段。ID3标签是一种标准化的元数据容器,用于存储关于MP3文件的信息。 首先,我们定义一个字典`writeMp3Header`来存放待写入的元数据,包括`...
2. `NdefMessage`: 包含一个或多个`NdefRecord`,代表要写入到NFC标签的数据。 3. `NdefRecord`: 存储单个数据项,包含类型、ID和数据三部分。 三、创建NFC写入应用 1. 添加权限:在AndroidManifest.xml中添加`NFC`...
IMWRITE2TIF 将图像写入... IMWRITE2TIF(IMGDATA,HEADER,IMFILE,DATATYPE,TAG NAME1,TAG VALUE1,TAG NAME2,TAG VALUE2, ...) 使用指定的 Matlab 支持的 TIF 标签值写入。 这些新标签值会覆盖 HEADER 中已定义的值。 注
`NdefFormatable`接口则用于对未格式化的Type 2-Tag进行初始化和数据写入。通过`Tag`对象,开发者可以获取Tag的详细信息,并使用`TagTechnology`子类如`MifareClassic`或`Ndef`进行具体操作。 **5. 应用场景** ...
在这个项目中,可能涉及到读取电商数据文件(如CSV或JSON),并将其内容处理后写入带有tag标签的新文件。 4. **数据清洗**:在处理实际数据时,数据清洗是非常重要的步骤。这可能包括处理缺失值、异常值、重复值,...
4. **编程接口**:在Proface触摸屏中,开发者可以通过编程接口(如PLC通讯协议)来读取和写入Tag,实现对设备的控制和监控。 **Tag的使用方法** 1. **创建与编辑**:用户可以在触摸屏的配置软件中创建新的Tag,...
MP3 TAG是音频文件MP3中的元数据,用于存储关于音乐曲目的信息,如艺术家、专辑、歌曲名称、年份、流派等。批量修改MP3 TAG对于整理和管理大量音乐文件非常有用,尤其当你从不同来源获取音乐,且它们的TAG信息不统一...
本话题主要关注C++编程中对WMA(Windows Media Audio)和MP3文件的元数据(Tag)进行读取和写入的类库实现。 标题“wmamp3文件标题艺术家等tag属性读写类”指出这是一个专门针对WMA和MP3文件的类库,用于处理音频...