Android Beam:与回退到web版本的应用程序内链接共享

Android Beam:与回退到web版本的应用程序内链接共享,android,nfc,ndef,nfc-p2p,android-beam,Android,Nfc,Ndef,Nfc P2p,Android Beam,是否有一种方法可以构建NdefMessage: 如果我的应用程序安装在接收设备上,请打开其中的链接(例如,使用自定义URI方案) 如果未安装“我的应用程序”,请打开默认的web浏览器,其中包含指向移动网站上相同页面的链接 我让它们单独工作,但当我将两条NdefRecord放入NdefMessage并将其设置为通过Android Beam推送时,接收器设备会显示一个带有这两条记录的选择器。您可以单击其中一个,它将带您进入相应的应用程序(我的应用程序或Chrome)。有没有办法绕过此选择器,让它

是否有一种方法可以构建
NdefMessage

  • 如果我的应用程序安装在接收设备上,请打开其中的链接(例如,使用自定义URI方案)
  • 如果未安装“我的应用程序”,请打开默认的web浏览器,其中包含指向移动网站上相同页面的链接
我让它们单独工作,但当我将两条
NdefRecord
放入
NdefMessage
并将其设置为通过Android Beam推送时,接收器设备会显示一个带有这两条记录的选择器。您可以单击其中一个,它将带您进入相应的应用程序(我的应用程序或Chrome)。有没有办法绕过此选择器,让它自动启动第一个受支持的链接?

没有

但这里有两个解决办法:

  • Android支持所谓的ApplicationRecords,它指向某个特定的包。如果未安装,Android将打开play store安装该应用程序
  • 只需通过beam推送http://uri,并让您的应用程序解析此uri即可。当第一次“打开”链接要求您在浏览器和应用程序之间进行选择时,您将获得选择器
    如果不需要使用AndroidApplicationRecords,只需使用一条指向移动页面的NDEF记录即可

    例如,如果您的移动页面是,您将在NDEF消息中将其存储为URI记录:

    +-----------------------------------------+
    | WKT:URI | http://www.example.com/mypage |
    +-----------------------------------------+
    
    然后,如果未安装应用程序,这将触发移动设备上的webbrowser

    要获取此记录以启动应用程序,您需要向应用程序的清单中添加适当的意图筛选器:

    <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,因此该活动将继续在现有的intent筛选器上触发。在活动中,您可以从intent中检索NDEF消息,并处理第二条记录/其他记录中的参数

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