ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

android – 如何通过扫描NFC标签启动没有启动器图标的应用程序?

2019-07-02 21:10:35  阅读:233  来源: 互联网

标签:android intentfilter nfc ndef android-applicationrecord


我想通过扫描包含Android Application Record的NFC标签来启动我的应用程序.但是,此应用程序不应该有启动器图标,因此我无法使用CATEGORY_LAUNCHER.

我的问题是,如果我在清单中注释掉CATEGORY_LAUNCHER行,则该应用程序不再启动(在Google Play上执行搜索):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.my">

    <application android:label="@string/app_name">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!--<category android:name="android.intent.category.LAUNCHER" />-->
            </intent-filter>
        </activity>
    </application>
</manifest>

我也尝试添加以下intent过滤器,但没有运气:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

我该怎么做才能让它发挥作用?我应该在MainActivity中添加代码来处理NDEF_DISCOVERED意图吗?

解决方法:

除了Android应用程序记录(AAR)之外,执行此操作的典型方法是向标记添加另一条记录(MIME类型,NFC论坛外部类型或URI).在这种情况下,AAR必须是标签上NDEF消息的最后一个(或至少不是第一个)记录.

然后,您可以使用NDEF_DISCOVERED意图过滤器通过过滤该特定数据类型(即标记上NDEF消息的第一条记录的类型)来捕获标记发现.例如.对于NFC论坛外部类型:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="vnd.android.nfc"
              android:host="ext"
              android:pathPrefix="/yourdomain.com:yourtypename"/>
    </intent-filter>
</activity>

在这种情况下,AAR将确保您的应用程序优先于注册相同类型的任何其他应用程序,并且Play应用程序将在您的应用程序尚未安装时打开.

如果您没有为匹配的NDEF_DISCOVERED意图过滤器注册任何活动,则AAR将导致第一个具有MAIN / LAUNCHER意图过滤器的活动(在这种情况下,Android将不会将标记的句柄传递给您的活动).因此,如果既没有注册NDEF_DISCOVERED意图也没有注册MAIN / LAUNCHER意图,那么AAR机制将不起作用.

但是,如果您希望您的标签仅包含AAR而没有其他记录,该怎么办?

您可以通过为AAR本身注册一个intent过滤器来完成此操作. AAR是NFC论坛外部类型,类型名称为“urn:nfc:ext:android.com:pkg”,因此您可以使用以下intent过滤器:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="vnd.android.nfc" android:host="ext"
          android:pathPrefix="/android.com:pkg" />
</intent-filter>

标签:android,intentfilter,nfc,ndef,android-applicationrecord
来源: https://codeday.me/bug/20190702/1360074.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有