10

我正在尝试编写一个简单的应用程序来与 NFC 标签进行交互,但我似乎无法让我的手机执行任何操作,只能触发默认的 NFC 标签应用程序。我真的只想能够拦截我扫描的任何标签,确定它是否有一些数据,并采取相应的行动。

现在我的清单文件看起来像

<uses-sdk android:minSdkVersion="10" />
<uses-feature android:name="android.hardware.nfc" android:required="true"/>
<uses-permission android:name="android.permission.NFC"/>

<application 
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".NfcActivity"
        android:label="@string/app_name">
        <intent-filter>
           <action android:name="android.intent.action.MAIN"/>
           <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
        </intent-filter>
    </activity>
</application>

但是,在扫描 NFC 标签时,我从未看到活动开始。我在这里错过了什么吗?我尝试将意图过滤器放在 aBroadcastReceiver中,但也没有运气......

4

4 回答 4

26

您不能让您的应用程序由您扫描的所有 NFC 标签启动。Android 将根据意图过滤器的具体程度来确定最合适的应用程序。但是,如果您的应用程序在前台运行,您可以使用NFC 前台调度来捕获所有 NFC 意图。

补充onCreate()

mAdapter = NfcAdapter.getDefaultAdapter(this);
PendingIntent pendingIntent = PendingIntent.getActivity(
  this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

补充onResume()

mAdapter.enableForegroundDispatch(this, pendingIntent, null, null);

补充onPause()

mAdapter.disableForegroundDispatch(this);

您可以像这样获取NFConNewIntent标签:

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
于 2012-06-17T21:41:13.087 回答
7

SDK 文档将此作为一个基本示例。

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" />
</intent-filter>
于 2012-06-17T21:17:23.323 回答
1

您期望标签以 NDEF 格式定义。所以你的程序只有在被读取的标签是 NDEF 格式时才会启动。

您可以尝试更通用的意图过滤器,例如 TAG_DISCOVERED 或 TECH_DISCOVERED。

于 2013-07-26T07:16:15.093 回答
0

Android 会自动选择最相关的应用程序来处理扫描的 NFC 标签。您需要在您的 中更具体intent-filter,即只收听 TEXT-Tags、URL-Tags 或 CONTACT-Tags。这可以通过进一步指定过滤器来完成,使用您的示例, <data android:mimeType="text/plain" />用于 TEXT-Tags。否则,将触发默认的 NFC-Tag 应用程序。

于 2012-06-17T21:21:12.923 回答