2014-02-24 34 views
1

有沒有一種方法來構建一個NdefMessage以這樣的方式是:Android Beam功能:共享應用程式內回落到網絡版的鏈接

  • 如果我的應用程序是安裝在接收裝置上,打開在它的鏈接(使用自定義的URI方案,例如)
  • 如果我的應用程序安裝,打開默認的Web瀏覽器鏈接到同一網頁的移動網站上

我單獨使用了這些工具,但是當我將兩個NdefRecord放入NdefMessage並將其設置爲通過Android Beam推送時,接收方設備會顯示一個包含這兩個記錄的選擇器。你可以點擊其中的一個,它會帶你到適當的應用程序(我的應用程序或Chrome)。有沒有辦法繞過這個選擇器,並自動啓動第一個支持的鏈接?

回答

0

如果您不需要使用AndroidApplicationRecords,您可以簡單地使用指向您的移動頁面的單個NDEF記錄。

舉例來說,如果您的移動網頁是http://www.example.com/mypage,你將存儲這是一個URI記錄在NDEF消息:

+-----------------------------------------+ 
| 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消息,並處理來自第二條記錄/其他記錄的參數。

1

不,沒有。

但是你這裏有兩種解決方法:

  1. Android支持所謂ApplicationRecords這點到一些特定的包。如果未安裝,Android會打開Play商店以安裝該應用。
  2. 只需通過樑推動http:// uri,讓你的應用程序解決這個uris。第一次要求您在瀏覽器和您的應用程序之間進行選擇時,您會在「打開」鏈接時獲得選擇器。
相關問題