0

我想发送我当前屏幕的内容。基本上我有三个带有长列表的选项卡,我想发送实际的选项卡及其位置。

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

如果有人可以向我解释它是如何工作的,如果这不可能解释我为什么这是不可能的,我会很高兴。

4

2 回答 2

2

我想说,您可以简单地将网络链接发送到 Uri 记录中,并为此 URL 添加一个意图过滤器。如果安装了应用程序,它可以通过解析 URL 获取所需的信息。如果没有,浏览器将打开。

于 2013-10-12T23:39:21.863 回答
1

正如@NFC 家伙已经解释的那样,要走的路是 Beam 你的 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 属于您(即,如果没有其他应用程序注册以 URI 开头的 URI http://example.com/myapp/)并且您的应用程序安装了,则不会有意图选择器(因为更具体的 URI 将优先)。如果您的应用已安装,它将收到 URI。如果未安装,浏览器将打开 URI,或者如果其他应用程序NDEF_DISCOVERED仅使用“http”方案注册,则会有一个意图选择器(尽管通常除了 Web 浏览器之外的其他应用程序通常应该注册一个更具体的 URI)。

关于您当前的 NDEF 消息:

  1. 您不应使用多个 Android 应用程序记录 (AAR)。其中只有一种会有效。
  2. 如果您为您的应用程序使用 AAR,则在未安装您的应用程序的情况下,Web 浏览器将无法捕获 URI。相反,您的应用的 Play 商店列表将被打开。
  3. 如果未安装您的应用程序,则使用 URI 以外的其他内容作为第一条记录将使默认 Web 浏览器无法自动启动。
于 2014-04-18T21:14:21.713 回答