Ant*_*sto 1 android nfc intentfilter ndef android-applicationrecord
基于Android NFC doc提供的此文档:
如果标记包含AAR,则标记调度系统将按以下方式调度:
尝试使用意图过滤器正常启动活动.如果与意图匹配的活动也与AAR匹配,则启动活动.
如果为intent过滤的Activity与AAR不匹配,如果多个Activities可以处理intent,或者没有Activity处理intent,请启动AAR指定的应用程序.
如果没有应用程序可以从AAR开始,请转到Google Play以根据AAR下载应用程序.
从这些方面我明白,如果我为活动指定了一个intent过滤器,A并且收到的NDEF消息与过滤器匹配A,A即使NDEF消息包含A属于的app的AAR记录,也会启动.
在我的情况下,A只有在没有AAR记录时才开始.一旦我添加AAR记录,活动A就不会启动:当检测到NDEF消息时,将启动AAR中指示的应用程序的主要活动.
" 如果活动[...]也与AAR相匹配 ",它们意味着什么?
有没有人可以提供提示?
1.)尝试使用意图过滤器正常启动活动.如果与意图匹配的活动也与AAR匹配,则启动活动.
这意味着活动A具有一个NDEF_DISCOVEREDintent过滤器,该过滤器匹配标签上NDEF消息的第一个 NDEF记录的数据类型,并且 AAR与活动A所属的应用程序包名称匹配.
2.)如果为intent过滤的Activity与AAR不匹配,如果多个Activities可以处理intent,或者没有Activity处理intent,则启动AAR指定的应用程序.
这意味着有
NDEF_DISCOVERED意图过滤不所述的数据类型相匹配第一标签上的NDEF消息的NDEF记录和所述AAR匹配的应用程序包名活性的属于,NDEF_DISCOVERED intent过滤器,并且 AAR与活动A和B所属的应用程序包名称匹配,或者NDEF_DISCOVERED意图过滤器.在这种情况下,具有与AAR中的包名称匹配的包名称的应用程序通过发送MAIN具有类别的意图操作来启动LAUNCHER,该类别适用于具有此类意图过滤器的应用程序中的第一个活动.因此,应用程序"已启动",就像点击了该活动的启动器图标一样.
3.)如果没有应用程序可以从AAR开始,请转到Google Play以根据AAR下载应用程序.
这意味着如果没有包含名称与AAR中的名称匹配的应用程序,则会打开Play商店.
因此,例如,如果您有NDEF消息
+------------------------------+----------------------+
| URI: http://www.example.com/ | AAR: com.example.app |
+------------------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)
那么你需要一个包含名称的应用程序,该应用程序com.example.app具有一个带有intent过滤器的活动
<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>
Run Code Online (Sandbox Code Playgroud)
场景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>
Run Code Online (Sandbox Code Playgroud)
场景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>
Run Code Online (Sandbox Code Playgroud)
场景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>
Run Code Online (Sandbox Code Playgroud)
场景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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |