如何在 android 中读取 NFC 中的 URL
How to read URL in NFC in android
我使用 this 代码将 NFC
阅读功能集成到我的 android
应用程序中。将纯文本写入 NFC
标签并使用应用程序读取,它运行良好。现在我的要求是从 NFC
读取 URL
tag.When 从 NFC
标签读取值,它会自动打开浏览器并加载 URL
。那么需要做哪些更改实现阅读内容并打开我的应用程序?
这里我假设返回的结果只有 url 而没有其他数据,所以只需将 onPostExecute
修改为 :
@Override
protected void onPostExecute(String result) {
if (result != null) {
String url = result;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
}
如果还包括其他数据而不是解析结果只得到 URL。
添加到您的清单
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data
android:host="your host name"
android:scheme="http" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
在activity你要打开
如果您想在靠近 NFC 标签时启动应用程序,您可以使用过滤器,但请注意,如果您的应用程序 运行 它不会收到有关标签的通知。您必须在您的应用程序中注册它:
protected void onCreate(Bundle savedInstanceState) {
...
Intent nfcIntent = new Intent(this, getClass());
nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
nfcPendingIntent =
PendingIntent.getActivity(this, 0, nfcIntent, 0);
IntentFilter tagIntentFilter =
new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
tagIntentFilter.addDataType("text/plain");
intentFiltersArray = new IntentFilter[]{tagIntentFilter};
}
catch (Throwable t) {
t.printStackTrace();
}
}
并记得在 onResume 中启用它:
nfcAdpt.enableForegroundDispatch(
this,
nfcPendingIntent,
intentFiltersArray,
null);
handleIntent(getIntent());
并在 onPause 中取消注册:
nfcAdpt.disableForegroundDispatch(这个);
..请注意,数据可以存储在 NFC 标签中的 SmartPoster 结构中。在这种情况下,您必须以另一种方式阅读它。
在我的博客中,您可以找到有关阅读 SmartPoster and more
的 post
我使用 this 代码将 NFC
阅读功能集成到我的 android
应用程序中。将纯文本写入 NFC
标签并使用应用程序读取,它运行良好。现在我的要求是从 NFC
读取 URL
tag.When 从 NFC
标签读取值,它会自动打开浏览器并加载 URL
。那么需要做哪些更改实现阅读内容并打开我的应用程序?
这里我假设返回的结果只有 url 而没有其他数据,所以只需将 onPostExecute
修改为 :
@Override
protected void onPostExecute(String result) {
if (result != null) {
String url = result;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
}
如果还包括其他数据而不是解析结果只得到 URL。
添加到您的清单
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data
android:host="your host name"
android:scheme="http" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
在activity你要打开
如果您想在靠近 NFC 标签时启动应用程序,您可以使用过滤器,但请注意,如果您的应用程序 运行 它不会收到有关标签的通知。您必须在您的应用程序中注册它:
protected void onCreate(Bundle savedInstanceState) {
...
Intent nfcIntent = new Intent(this, getClass());
nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
nfcPendingIntent =
PendingIntent.getActivity(this, 0, nfcIntent, 0);
IntentFilter tagIntentFilter =
new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
tagIntentFilter.addDataType("text/plain");
intentFiltersArray = new IntentFilter[]{tagIntentFilter};
}
catch (Throwable t) {
t.printStackTrace();
}
}
并记得在 onResume 中启用它:
nfcAdpt.enableForegroundDispatch(
this,
nfcPendingIntent,
intentFiltersArray,
null);
handleIntent(getIntent());
并在 onPause 中取消注册:
nfcAdpt.disableForegroundDispatch(这个);
..请注意,数据可以存储在 NFC 标签中的 SmartPoster 结构中。在这种情况下,您必须以另一种方式阅读它。 在我的博客中,您可以找到有关阅读 SmartPoster and more
的 post