基于这个文档可用的Android NFC文档 :
如果一个标签包含一个AAR,标签调度系统调度的方式如下:
尝试使用意图过滤器正常启动的活动。 如果意图相匹配的活动的AAR也匹配,启动活动。
如果在意向不匹配AAR滤波器的活动,如果多个活动可以处理这个意图,或者如果没有活动处理的意图,开始由AAR指定的应用程序。
如果没有应用程序可以与AAR开始,去谷歌Play下载基于AAR的应用。
从这些行我明白,如果我指定一个意图过滤器为活动A
和接收的NDEF消息的过滤器匹配A
, A
会即使NDEF消息包含应用程序的AAR记录开始A
属于。
在我的情况A
开始只是如果没有AAR记录。 当我加入AAR记录,活动A
未启动:当检测到NDEF消息时,在AAR指定的应用程序的主要活动启动。
这是什么意思与“ 如果活动[...]也匹配AAR”?
是否有任何人谁可以提供一个暗示?
1.)尝试使用意图过滤器正常开始一个活动。 如果意图相匹配的活动的AAR也匹配,启动活动。
这意味着,活动A具有NDEF_DISCOVERED
该标签上的NDEF消息的第一 NDEF记录的数据类型相匹配意图过滤器和所述AAR该活动A属于应用程序包名称相匹配。
2)如果在意向不匹配AAR滤波器的活动,如果多个活动可以处理这个意图,或者如果没有活动处理的意图,开始由AAR指定的应用程序。
这意味着,有
- 具有活性的
NDEF_DISCOVERED
意图滤波器不在标签和所述AAR匹配的应用程序包名活性的属于NDEF消息的第一 NDEF记录的数据类型相匹配, - 活性的和活动B中均具有
NDEF_DISCOVERED
,关于标签和所述AAR匹配活动应用程序包的名称和B中的NDEF消息的第一 NDEF记录的数据类型相匹配意图过滤器属于,或 - 没有匹配AAR应用程序的活动有一个
NDEF_DISCOVERED
意图过滤器。
在这种情况下,具有相匹配的一个在AAR包名称的应用程序通过发送意图的行动开始MAIN
用类LAUNCHER
在您的应用程序,有这样一个意图过滤器的第一个活动。 因此,应用程序是“开始”,仿佛被点击了该活动的启动器图标。
3)如果没有应用程序可以与AAR开始,去谷歌Play下载基于AAR的应用。
这意味着,如果存在与匹配的AAR的一个包名没有应用程序,然后Play商店被打开。
所以,举例来说,如果你有NDEF消息
+------------------------------+----------------------+
| URI: http://www.example.com/ | AAR: com.example.app |
+------------------------------+----------------------+
那么你就需要用包名称的应用com.example.app
有一个活动,意图过滤器像
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.example.com" android:pathPrefix="/" />
</intent-filter>
方案1(匹配的活性A):
<manifest package="com.example.app" ... >
<uses-permission android:name="android.permission.NFC" />
<application ...>
<activity android:name="MAIN" ...>
<intent-filter>
<action android:name="android.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="A" ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.example.com" android:pathPrefix="/" />
</intent-filter>
</activity>
</application>
</manifest>
场景2a(敌不过活动A,MAIN启动):
<manifest package="com.example.app" ... >
<uses-permission android:name="android.permission.NFC" />
<application ...>
<activity android:name="MAIN" ...>
<intent-filter>
<action android:name="android.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="A" ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
</application>
</manifest>
场景2b(匹配活动A和B,MAIN启动):
<manifest package="com.example.app" ... >
<uses-permission android:name="android.permission.NFC" />
<application ...>
<activity android:name="MAIN" ...>
<intent-filter>
<action android:name="android.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="A" ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.example.com" android:pathPrefix="/" />
</intent-filter>
</activity>
<activity android:name="B" ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.example.com" android:pathPrefix="/" />
</intent-filter>
</activity>
</application>
</manifest>
场景2c(没有NDEF_DISCOVERED
意图过滤器,主要是推出):
<manifest package="com.example.app" ... >
<uses-permission android:name="android.permission.NFC" />
<application ...>
<activity android:name="MAIN" ...>
<intent-filter>
<action android:name="android.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>