我使用此代码将NFC
阅读集成到我的android
应用程序中。将纯文本写入NFC
标签并使用应用程序读取它是完美的工作。现在我的要求是从标签中读取URL
。当NFC
从标签中读取值时,NFC
它会自动打开浏览器并加载URL
。那么实现读取内容并打开我的应用程序需要进行哪些更改?
问问题
1769 次
3 回答
1
添加到您的清单
<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>
在您要打开的活动中
于 2015-03-24T04:24:37.877 回答
0
在这里我假设返回的结果将只有 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。
于 2015-03-23T08:56:35.827 回答
0
如果您想在接近 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(this);
..请注意,数据可以存储在您的 NFC 标签中的 SmartPoster 结构中。在这种情况下,您必须以另一种方式阅读它。在我的博客中,您可以找到一篇关于阅读SmartPoster 等的文章
于 2015-03-26T16:10:04.693 回答