根据Android NFC doc提供的此文档:
如果标签包含AAR,则标签调度系统将调度 以下方式:
尝试使用意图过滤器正常启动活动。如果 与意图匹配的活动也与AAR匹配,启动 活动。
如果为意图过滤的活动不匹配 AAR,如果多个活动可以处理意图,或者如果没有 Activity处理intent,启动指定的应用程序 AAR。
- 醇>
如果没有应用程序可以从AAR开始,请转到Google Play 下载基于AAR的应用程序。
从这些方面我明白,如果我为活动A
指定了一个意图过滤器,并且收到的NDEF消息与A
的过滤器匹配,即使NDEF也会启动A
message包含A
所属的应用的AAR记录。
在我的情况下,A
仅在没有AAR记录时启动。一旦我添加AAR记录,活动A
就不会启动:当检测到NDEF消息时,将启动AAR中指示的应用程序的主要活动。
如果活动[...]也匹配AAR ,那么“”是什么意思?
是否有人可以提供提示?
答案 0 :(得分:5)
1。)尝试使用意图过滤器正常启动活动。如果与意图匹配的活动也与AAR匹配,则启动活动。
这意味着活动A的NDEF_DISCOVERED
意图过滤器与标签上的NDEF消息的第一个 NDEF记录的数据类型相匹配和 AAR与活动A所属的应用程序包名称匹配。
2。)如果为intent过滤的Activity与AAR不匹配,如果多个Activities可以处理intent,或者没有Activity处理intent,则启动AAR指定的应用程序。
这意味着有
NDEF_DISCOVERED
意图过滤器与标签和上的NDEF消息的第一个 NDEF记录的数据类型不匹配AAR匹配活动A所属的应用程序包名称,NDEF_DISCOVERED
意图过滤器与NDEF消息的第一个 NDEF记录的数据类型相匹配标记和 AAR与活动A和B所属的应用程序包名称匹配,或NDEF_DISCOVERED
意图过滤器。在这种情况下,通过发送带有类别MAIN
的意图操作LAUNCHER
来启动具有与AAR中的包名称匹配的应用的应用,该应用中的第一个活动具有此类意图过滤器。因此,应用程序“已启动”,就像点击了该活动的启动器图标一样。
3.如果没有应用程序可以从AAR开始,请转到Google 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
意图过滤器,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>
</application>
</manifest>