如果未安装应用程序,请将我的应用程序的梁元信息或URL

时间:2013-08-27 07:29:19

标签: android nfc ndef nfc-p2p android-beam

我想要点亮我的画面内容。基本上我有三个带有长列表的选项卡,我想要发送实际的选项卡及其位置。

我的目标是安装应用程序:
梁一些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);

如果有人能解释我的工作方式,如果无法解释为什么这是不可能的,我会很高兴。

2 个答案:

答案 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消息:

  1. 您不应使用多个Android应用程序记录(AAR)。只有其中一个会有效。
  2. 如果您为应用程序使用AAR,则表示如果未安装应用程序,Web浏览器无法捕获URI。相反,您的应用的Play商品详情将会打开。
  3. 如果您的应用未安装,则使用URI以外的其他内容作为第一条记录将无法自动启动默认网络浏览器。