我想读取检测到的NFC标签中包含的NDEF内容(即标签ID,标签大小,标签类型,标签可写,目标类型和消息类型).
如果使用Android应用程序记录(AAR),则意图操作是
android.intent.action.MAIN
Run Code Online (Sandbox Code Playgroud)
所以我不知道这是正常发射还是nfc发射.
无论活动是正常启动还是在读取nfc标签之后,我都需要在活动中做一些不同的事情.如果手机上有另一个具有相同意图过滤器的应用程序,我也不想显示选择应用程序的提示,例如:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何方法可以将一串文本(URL)保存到NFC标签,让我们说MIFARE或NTAG203,可以被其他设备(智能手机)读取,而无需任何特殊的标签读取应用程序.
我已经测试了几个应用程序,例如Trigger for Android,并注意到如果读取标签的设备没有所需的应用程序来读取标签上的数据/指令,它仍会打开一个URL,将您发送到Play商店下载该应用程序应用.
因此必须有一种方法来保存所有/部分支持NFC的手机可读的数据.简单地说,我想为Android创建一个应用程序,将数据写入NFC标签,并且可以通过随机的NFC手机读取/打开/执行数据.
那么是否可以准备一个NFC标签,在读取设备上触发某些操作而无需特定的应用程序?我可以使用我的应用程序在NFC标签上写入什么类型的数据来实现此目的?
我使用Android设备上的NFC Tools应用程序(通过内置NFC阅读器)将文本写入Mifare Classic 1K标签.这段文字是"更多"(我的姓).
然后,我正在尝试使用NFC读取器ACR1255U和ACS提供的库来阅读此文本(NDEF格式).
我能够得到以下:
阅读第4块:FF B0 00 04 10回复:0000030ED1010A5402656E6D6F726574 9000
阅读第5块:FF B0 00 05 10回复:746FFE00000000000000000000000000 9000
我知道这FE表明内容的结束,6D6F726574746F是我的文字.但是如何识别文本的开始位置?我很难理解恩智浦文档中描述的TLV格式.
我正在开发一个 android 应用程序来写入 nfc 标签的特定内存位置。我需要通过读取 NFC 标签获得最大 NDEF 消息有效负载大小,以便我可以在该范围内定义内存位置。
我知道它能够通过下面的代码获得整个 ndef 内存大小:
Ndef ndef = Ndef.get(tag); int size = ndef.getMaxSize();
有没有办法获得最大有效载荷大小?
任何帮助将不胜感激!
我在我的应用程序中有两个活动具有相同的意图过滤器"android.nfc.action.NDEF_DISCOVERED",是否有任何方式告诉活动programaticaly我想开始一个特定的活动而不是选择在发现时开始的活动的ndef?更清楚的是,一个设备正在运行Activity1而第二个设备正在运行Activity2,每当我从一个设备或另一个设备发出光束时,设备就会问我要启动哪个活动,因为它们都具有相同的intent过滤器.
这是我的清单:
<activity
android:label="@string/app_name"
android:name=".Activity1"
android:screenOrientation="portrait"
>
<intent-filter >
<action android:name="com.example.activity1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".Activity2"
android:screenOrientation="portrait"
>
<intent-filter >
<action android:name="com.example.activity2" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个用例,以便当任何具有支持NFC的智能手机的用户点击NFC标签时,浏览器应该使用标签中包含的URL打开.
目前我使用的是Mifare Classic 1K标签,其中包含我在NFC标签中写的网址http://www.google.com.
现在,当我从Google Nexus 7(2012)版本中点击/扫描标签时,标签会被检测到,但浏览器没有显示.此外,在其他设备上,包括三星S3,S4,标签根本检测不到.为什么会这样?
这是我的代码,用于编写和读取标记,
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//check for nfc
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 };
//write tag
write("http://www.google.com",tag);
}
private void write(String text, Tag tag) throws IOException, FormatException {
NdefRecord[] records = { createRecord(text) };
NdefMessage message = new NdefMessage(records);
// Get an instance …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用NFC,并且工作正常。但是,我想确保仅启动我的应用程序,并且没有其他应用程序可以处理此意图。以下是我的清单文件中的代码:
<activity android:name="com.mypackage.name.BeamActivity">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我的手机上还有另一个示例应用程序,该应用程序正在检测NFC意图并向我提供意图选择器。以下是清单文件中的代码。
<activity android:name="com.package2.name.NFCStickyNotesActivity" android:label="Sticky Notes" >
<!-- Handle notes detected from outside our application -->
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我希望我的应用程序成为将特定NFC Intent从另一台设备推送过来时唯一的应用程序。
我不确定是否必须在清单文件或代码中执行特定的操作。任何帮助表示赞赏。
当我在配备Android Lollipop(5.x)或棉花糖(6.0)的设备上使用此代码时,它可以正常工作:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public NdefMessage createNdfMessage(String content) {
NdefRecord record = NdefRecord.createTextRecord("en", content);
NdefMessage msg = new NdefMessage(new NdefRecord[]{record});
return msg;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在装有Android 4.2.2(API级别17)的设备上尝试此操作时,我的应用程序崩溃了。如何使用此代码在低于21的API级别(该方法NdefRecord.createTextRecord可用的API级别)上创建文本记录?
我有一张 Mifare ULC 卡。当我将此卡轻触支持 NFC 的设备时,它应该会打开手机中的默认浏览器,而无需任何其他 NFC 应用程序。
我已经将下面的 NDEF URL 数据编码到标签中,但是当我扫描标签时,它没有打开浏览器。谁能指导我哪里出错了?
03 - tag for the NDEF
12 - length of the NDEF msg (18 Bytes)
D3 Record header (of first and only record)
Bit 7 = MB = 1: first record of NDEF message
Bit 6 = ME = 1: last record of NDEF message
Bit 5 = CF = 0: last or only record of chain
Bit 4 = SR = 1: short record length field
Bit …Run Code Online (Sandbox Code Playgroud)