1

有没有办法以NdefMessage这样的方式构造:

  • 如果我的应用安装在接收设备上,请打开其中的链接(例如,使用自定义 URI 方案)
  • 如果安装我的应用程序,请打开默认 Web 浏览器,其中包含指向移动网站上同一页面的链接

我让这些单独工作,但是当我将两个NdefRecord放入 aNdefMessage 并将其设置为通过 Android Beam 推送时,接收器设备会显示一个带有这两个记录的选择器。您可以单击其中之一,它会将您带到相应的应用程序(我的应用程序或 Chrome)。有没有办法绕过这个选择器并让它自动启动第一个支持的链接?

4

2 回答 2

1

不,没有。

但是这里有两种解决方法:

  1. Android 支持所谓的 ApplicationRecords,它指向某个特定的包。如果未安装,Android 将打开 Play 商店安装该应用程序。
  2. 只需通过 beam 推送 http:// uri 并让您的应用程序也解析此 uri。第一次“打开”链接要求您在浏览器和您的应用程序之间进行选择时,您将获得选择器。
于 2014-02-24T11:54:07.030 回答
0

如果您不需要使用 AndroidApplicationRecords,您可以简单地使用指向您的移动页面的单个 NDEF 记录。

例如,如果您的移动页面是http://www.example.com/mypage,您可以将其作为 URI 记录存储在 NDEF 消息中:

+-----------------------------------------+
| WKT:URI | http://www.example.com/mypage |
+-----------------------------------------+

然后,如果您的应用程序没有安装,这将触发移动设备上的网络浏览器。

要获取此记录以启动您的应用,您需要在应用的清单中添加适当的意图过滤器:

<activity ...>
    <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="/mypage" />
    </intent-filter>
</activity>

如果您想将其他数据传递给您的应用程序,您当然可以添加第二条记录(URI 记录之后),其中包含您的自定义数据。在这种情况下,您的 NDEF 消息可能如下所示:

+-----------------------------------------+
| WKT:URI | http://www.example.com/mypage |
+-----------------------------------------+
| EXT:example.com:mytype | myparameters   |
+-----------------------------------------+
| ...                                     |

由于该消息中的第一条记录仍然是您的 URI,因此活动将继续在现有意图过滤器上触发。在活动中,您可以从意图中检索 NDEF 消息并处理来自第二条记录/其他记录的参数。

于 2014-02-28T13:11:16.413 回答