如何将 NFC 标签上的 AAR 重定向到新的应用程序 ID?

How to redirect the AAR on an NFC tag to a new application ID?

我有一个带有两条记录的 NDEF NFC 标签:

至此,发现NFC标签时旧应用程序正常启动。

但我想创建一个新的应用程序来处理这些 NFC 标签,而不是旧的。

我在清单中添加了:

<android:name=".splash.SplashActivity"
    android:screenOrientation="portrait"
    android:stateNotNeeded="true"
    android:theme="@style/SplashTheme">

    <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/nfc_tech_filter" />

    <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" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:host="http://website.com" android:scheme="http" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/OLDAPPLICATIONID" />
    </intent-filter>
</activity>

我已经在 phone 上安装了新应用程序,但是当我点击 NFC 标签时,它会打开 Play 商店并将我重定向到旧应用程序。

是否可以创建在发现包含其他应用程序 ID 的标签时触发的 NFC 过滤器?

不,无法使用该标签启动您的新应用。 Android 应用程序记录 (AAR) 的整个想法就是为了防止这种情况发生(参见 NFC Basics):

[... an AAR] provides a stronger certainty that your application is started when an NFC tag is scanned. [...] AARs are useful if you want to prevent other applications from filtering for the same intent and potentially handling specific tags that you have deployed.

因此,如果您想使用 NFC 标签启动您的应用程序,唯一的选择是替换标签上的数据(或整个标签,以防写入锁定)。

但是,如果您只想在您的(新)应用程序已在前台打开时读取标签,您可以使用前台调度系统或 reader 模式来覆盖该行为并强制 Android 将标签发现事件分派到您的(新)应用程序。参见 Using the Foreground Dispatch System