有一种方法可以了解应用是否已由NFC标签启动?检查应用是否由NFC标签启动
我已经编写了一个nfc标签来启动我的应用程序,编写应用程序包名(第三个应用程序),我想在这种情况下启动一个特定的片段,我该怎么做?
有一种方法可以了解应用是否已由NFC标签启动?检查应用是否由NFC标签启动
我已经编写了一个nfc标签来启动我的应用程序,编写应用程序包名(第三个应用程序),我想在这种情况下启动一个特定的片段,我该怎么做?
您必须为应用程序的活动添加一个意图过滤器,该过滤器记录要由nfc事件启动的活动。根据MIME类型或技术等,有不同的方式来指定该过滤器。 然后在该活动中,您可以检查onNewIntent()
和onResume()
如果启动该活动的意图是nfc意图。
public void onNewIntent(Intent newIntent) {
setIntent(newIntent);
// onResume is called afterwards, so we handle intent there
}
public void onResume() {
Intent intent = getIntent();
if (intent != null && NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Toast.makeText("NFC!", Toast.LENGTH_LONG).show();
// Here you could start your Fragment
}
}
请检查你有意向过滤器等选项的官方文档
https://developer.android.com/guide/topics/connectivity/nfc/nfc.html
谢谢。在清单中,我添加了一个意图过滤器,用于过滤纯文本,并向文本添加记录到nfc标签。即使我不需要nfc标签中的文本,这也是我发现正确启动我的应用程序的唯一方法 – Miche
您应该小心,如果应用程序转到后台并在稍后再次到达前台,则意图将会仍然是通过setIntent()设置它的NFC意图。意图中的标签在我认为的那种情况下是不可用的。如果您希望在处理后将setIntent()返回到MAIN启动器,以防止出现类似情况。 – jgriffin
@jgriffin你是对的,在我的实现中,我在onResume()的末尾调用setIntent(null),但这可能不是最好的解决方案。 – Ridcully
参见[获取与NDEF Android应用程序记录(AAR)NFC标签(HTTP://计算器.com/q/25504418/2425802) –
@MichaelRoland我的nfc标签只有一个AAR记录,所以肯定会发布我的应用程序。我不想从标签nfc捕获任何其他数据。如何在我的代码中理解该应用是否已由nfc标签启动?谢谢 – Miche
你读过那里的答案(特别是最后一段)吗?另请参阅[本答案](http://stackoverflow.com/a/21186762/2425802)了解如何过滤AAR本身。 –