如何在 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