Ant*_*han 3 tags android energy nfc
从我的阅读和实验中,我发现 Android 设备使用某种方法来防止重复读取标签(如此处所述)。这对节能非常有用,但限制了该技术的可能应用。
例如,我面临的问题是,我有一个内容不断更新的被动标签。一旦标签被读取,手机将停止检测标签,直到它被移除,在此期间,如果不将其从字段中移除并重新点击,您将无法继续读取标签中的更新内容。此外,在最初读取标签后,磁场或者关闭极弱以节省电力。因此,您无法持续为无源设备供电。
有没有办法强制 Android 设备持续供电并读取更新的被动标签?
注意:我不介意它是否涉及对 Android 设备进行 root 以实现对硬件的直接控制。
您在问题中陈述的内容对于 Android NFC 设备完全不正确。一旦检测到标签(= 响应所有强制性命令的有效标签,并可能被发送到应用程序),NFC 阅读器将持续为标签供电(HF 载波保持开启)并与其交换一些命令。在保持活动阶段(“存在检查”)期间交换的命令取决于标签类型、Android 版本和 Android NFC 堆栈实现。这通常是
这允许 NFC 堆栈确定标签是否仍然响应。仅当存在检查失败时,Android 才会关闭 NFC 阅读器的 HF 载波,并以完整轮询序列(测试各种支持的标签技术)或感应阶段(短 HF 载波脉冲到检测指示标签潜在存在的失谐)。
因此,如果您的标签行为正常并且您的用户设法将标签附加到 Android 设备上更长时间,则没有什么可以阻止您多次从同一个标签(连续附加时)读取新数据。你只需要确保你保持标签手柄(Tag对象,甚至从标签手柄实例化一个特定的标签技术对象),只要你要访问的标签和您的应用需求,标签读取活动维持连续前景。
例如,您可以执行这样的操作来从标签中读取持续更新的 NDEF 消息(请注意,您可能最好使用一个AsyncTask(或类似的)而不是简单地生成该线程,并且您可能想要实现某种机制来中断线程):
new Thread(new Runnable() {
public void run() {
Ndef ndef = Ndef.get(tag);
try {
while (true) {
try {
Thread.sleep(30000);
ndef.connect();
NdefMessage msg = ndef.getNdefMessage();
// TODO: do something
} catch (IOException e) {
// if the tag is gone we might want to end the thread:
break;
} finally {
try {
ndef.close();
} catch (Exception e) {}
}
}
} catch (InterruptedException e) {
}
}
}).start();
Run Code Online (Sandbox Code Playgroud)