【问题标题】:Android Beam: share a in-app link with fallback to web versionAndroid Beam:共享应用内链接并回退到网络版本
【发布时间】:2014-02-24 11:48:51
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    不,没有。

    但您有两种解决方法:

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

    【讨论】:

      【解决方案2】:

      如果您不需要使用 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,因此该活动将继续在现有的意图过滤器上触发。在 Activity 中,您可以从 Intent 中检索 NDEF 消息并处理来自第二条记录/其他记录的参数。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        相关资源
        最近更新 更多