Android NFC 仅在单击按钮时读取标签
Android NFC read Tag only on button click
我在慢慢学习Android。目前我在使用 NFC,我已经学习了一些教程并且我开始更好地理解它是如何工作的以及如何读写标签,我现在可以在我购买的标签上做什么。
大多数人希望他们的应用程序在靠近标签时立即启动,但出于学习目的,我只想在按下按钮时才开始发现,换句话说,我想控制发现。
据我所知,为了让应用程序立即启动,我们在 Manifest.xml 中实现了过滤器 ACTION_NDEF_DISCOVERED
我还读到只有当我们的应用程序不在前台时,使用意图进行过滤才有效。如果我们的应用程序在前台 运行,它不会收到通知,所以我们必须使用 NFC 前台调度。
我想不通的是如何操纵滤镜和前景,以便它们只对我单击按钮做出反应。
我的另一个问题是:它对读取和写入按钮都有效吗?
有人可以帮忙吗?如果能给点代码,请大神指点一下,我真是学懂了:-)
干杯。
看看这个名为 NDEF 工具的库 - link。
我前段时间用过,在按钮点击时读写NFC标签。查看库和我的代码并尝试一下。
public class NFCReadActivity extends NfcReaderActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_nfc);
// Read the tag, without prompting how/who should read it
setDetecting(true);
}
@Override
protected void readNdefMessage(Message message)
{
if (message != null)
{
// Iterate through all records in message
for (int k = 0; k < message.size(); k++)
{
Record record = message.get(k);
// Get record type (record.getClass().getSimpleName())
if (record instanceof TextRecord)
{
// Get NFC message
String message = ((TextRecord) record).getText();
// Inform user
Crouton.makeText(this, message, Style.CONFIRM).show();
}
}
}
}
// An empty NDEF message was read
@Override
protected void readEmptyNdefMessage()
{
Crouton.makeText(this, getString(R.string.NFC_empty_message), Style.ALERT).show();
}
// Something was read via NFC, but it was not an NDEF message
@Override
protected void readNonNdefMessage()
{
Crouton.makeText(this, getString(R.string.NFC_non_ndef_message), Style.ALERT).show();
}
// NFC feature was found and is currently enabled
@Override
protected void onNfcStateEnabled()
{
}
// NFC feature was found but is currently disabled
@Override
protected void onNfcStateDisabled()
{
Crouton.makeText(this, getString(R.string.NFC_state_disabled), Style.ALERT).show();
new GoToSettingsDialog(this).showNFCSettings();
}
// NFC setting changed since last check. For example, the user enabled NFC in the wireless settings
@Override
protected void onNfcStateChange(boolean enabled)
{
}
// This device does not have NFC hardware
@Override
protected void onNfcFeatureNotFound()
{
Crouton.makeText(this, getString(R.string.NFC_not_found), Style.ALERT).show();
}
}
我在慢慢学习Android。目前我在使用 NFC,我已经学习了一些教程并且我开始更好地理解它是如何工作的以及如何读写标签,我现在可以在我购买的标签上做什么。 大多数人希望他们的应用程序在靠近标签时立即启动,但出于学习目的,我只想在按下按钮时才开始发现,换句话说,我想控制发现。 据我所知,为了让应用程序立即启动,我们在 Manifest.xml 中实现了过滤器 ACTION_NDEF_DISCOVERED 我还读到只有当我们的应用程序不在前台时,使用意图进行过滤才有效。如果我们的应用程序在前台 运行,它不会收到通知,所以我们必须使用 NFC 前台调度。
我想不通的是如何操纵滤镜和前景,以便它们只对我单击按钮做出反应。
我的另一个问题是:它对读取和写入按钮都有效吗?
有人可以帮忙吗?如果能给点代码,请大神指点一下,我真是学懂了:-)
干杯。
看看这个名为 NDEF 工具的库 - link。
我前段时间用过,在按钮点击时读写NFC标签。查看库和我的代码并尝试一下。
public class NFCReadActivity extends NfcReaderActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_nfc);
// Read the tag, without prompting how/who should read it
setDetecting(true);
}
@Override
protected void readNdefMessage(Message message)
{
if (message != null)
{
// Iterate through all records in message
for (int k = 0; k < message.size(); k++)
{
Record record = message.get(k);
// Get record type (record.getClass().getSimpleName())
if (record instanceof TextRecord)
{
// Get NFC message
String message = ((TextRecord) record).getText();
// Inform user
Crouton.makeText(this, message, Style.CONFIRM).show();
}
}
}
}
// An empty NDEF message was read
@Override
protected void readEmptyNdefMessage()
{
Crouton.makeText(this, getString(R.string.NFC_empty_message), Style.ALERT).show();
}
// Something was read via NFC, but it was not an NDEF message
@Override
protected void readNonNdefMessage()
{
Crouton.makeText(this, getString(R.string.NFC_non_ndef_message), Style.ALERT).show();
}
// NFC feature was found and is currently enabled
@Override
protected void onNfcStateEnabled()
{
}
// NFC feature was found but is currently disabled
@Override
protected void onNfcStateDisabled()
{
Crouton.makeText(this, getString(R.string.NFC_state_disabled), Style.ALERT).show();
new GoToSettingsDialog(this).showNFCSettings();
}
// NFC setting changed since last check. For example, the user enabled NFC in the wireless settings
@Override
protected void onNfcStateChange(boolean enabled)
{
}
// This device does not have NFC hardware
@Override
protected void onNfcFeatureNotFound()
{
Crouton.makeText(this, getString(R.string.NFC_not_found), Style.ALERT).show();
}
}