Android Beam:与回退到网络版共享应用内链接

时间:2014-02-24 11:48:52

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

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

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

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

2 个答案:

答案 0 :(得分:1)

不,没有。

但是你有两个解决方法:

  1. Android支持所谓的ApplicationRecords,它指向某些特定的包。如果未安装,Android将打开Play商店以安装该应用。
  2. 只需通过光束推送http:// uri,让你的应用也解决这个问题。当"打开"时,您将获得选择器。该链接第一次要求您在浏览器和您的应用程序之间进行选择。

答案 1 :(得分:0)

如果您不需要使用AndroidApplicationRecords,则只需使用指向移动页面的单个NDEF记录。

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

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

然后,如果未安装您的应用程序,则会触发移动设备上的Web浏览器。

要获取此记录以启动您的应用,您需要为应用的清单添加正确的意图过滤器:

<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消息,并处理第二条记录/其他记录中的参数。