2

我使用代码将NFC阅读集成到我的android应用程序中。将纯文本写入NFC标签并使用应用程序读取它是完美的工作。现在我的要求是从标签中读取URL。当NFC从标签中读取值时,NFC它会自动打开浏览器并加载URL。那么实现读取内容并打开我的应用程序需要进行哪些更改?

4

3 回答 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 回答