我想要点亮我的画面内容。基本上我有三个带有长列表的选项卡,我想要发送实际的选项卡及其位置。
我的目标是安装应用程序:
梁一些id,标签和位置
如果应用未安装:
我想提供像这样http://example.com/viewer/42?tab=2
我在这里玩这个代码:
adapter.setNdefPushMessageCallback(new CreateNdefMessageCallback() {
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
return new NdefMessage(new NdefRecord[] {
NdefRecord.createExternal("com.example.android", "viewer", getData()),
NdefRecord.createUri(VIEWER_URL + id + "?tab=" + tab),
NdefRecord.createApplicationRecord("com.example.android"),
NdefRecord.createApplicationRecord("com.android.browser"),
});
}
}, this);
如果有人能解释我的工作方式,如果无法解释为什么这是不可能的,我会很高兴。
答案 0 :(得分:2)
我会说,您可以简单地在Uri记录中发布网络链接,并为此网址添加一个意图过滤器。如果安装了该应用程序,它可以通过解析URL获取所需的信息。如果没有,浏览器将会打开。
答案 1 :(得分:1)
正如@NFC guy已经解释过的那样,要做的就是将你的URI(和仅那个URI,或者至少那个URI作为第一个记录那个NDEF消息)。所以你的NDEF消息看起来像这样:
new NdefMessage(new NdefRecord[] {
NdefRecord.createUri("http://example.com/viewer/ + id + "?tab=" + tab),
// TODO: add more records if you want to provide additional data to YOUR app if it is installed
});
然后,您将在应用的清单中使用NDEF_DISCOVERED
意图过滤器来捕获该特定URI:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="example.com" android:pathPrefix="/viewer/" />
</intent-filter>
如果URI属于您(即,如果没有其他应用程序注册以http://example.com/myapp/
开头的URI)并且您安装了应用程序,则不会有意图选择器(因为更具体的URI将优先) 。如果您的应用已安装,它将收到URI。如果没有安装,浏览器将打开URI,或者如果仅为NDEF_DISCOVERED
注册的其他应用只使用方案&#34; http&#34;,则会有一个意图选择器(尽管通常是其他的)应用程序比Web浏览器通常应注册更具体的URI。)
关于您当前的NDEF消息: