【问题标题】:NFC type default appNFC类型默认应用
【发布时间】:2018-01-29 09:04:09
【问题描述】:

我刚开始使用 NFC。扫描 NFC 标签时,我的应用默认打开,但我有 2 个问题:

  1. 由于某种原因,我在启动器应用浏览器中看不到我的应用。

  2. 如何定义只在 NFC 为 URL 类型时才打开应用程序?

    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    
            <activity android:name=".MainActivity">
            <intent-filter>
    
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
    
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/nfc_tech_filter" />
        </activity>
    </application>
    

【问题讨论】:

    标签: android android-intent nfc intentfilter ndef


    【解决方案1】:

    第一个问题(应用程序未在启动器中显示)是由于多个过滤条件组合在一个 &lt;intent-filter&gt; 部分中的方式(请参阅 Intents and Intent Filters。您可以通过将您的意图过滤器拆分为单独的 &lt;intent-filter&gt; 轻松克服这个问题部分:

    <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:mimeType="text/plain" />
    </intent-filter>
    

    第二个问题取决于您在标签上存储了哪些数据(NDEF 记录)。例如,如果您存储了一个包含 URL https://stackoverflow.com/ 的 URI 记录,您将使用以下意图过滤器:

    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="https" android:host="stackoverflow.com" />
    </intent-filter>
    

    您可能还想检查

    【讨论】:

    • 非常感谢您的详细解答!
    • 如果我希望应用仅在特定文本上打开,您能否举例说明使用哪些数据 ()?
    • @Dim &lt;data /&gt; 只允许过滤数据类型,但不能过滤特定的数据负载(例如文本值)。您可能希望使用 NFC 论坛外部类型(过滤类型名称)、URI 记录(过滤 URL 前缀)或自定义 MIME 类型记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多