2013-03-24 117 views
3

此主題已經被覆蓋過,但我找不到具體針對我所問的答案。Android意圖從瀏覽器啓動

我在哪裏:我跟着hackmod的第一條建議在這裏:Make a link in the Android browser start up my app?和得到這個與網頁中的鏈接工作。

但是,我無法理解第二個選項(intent uri's)。這裏是我得到的:

<activity android:name="com.myapps.tests.Layout2" 
     android:label="Auth Complete" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="http" android:host="mydomain.com" 
       android:path="/launch" /> 
     </intent-filter> 
    </activity> 

現在,我可以去「mydomain.com/launch」,它啓動我的活動。這一切運作良好,除了我得到選擇器。我想要的是它只是在沒有選擇的情況下啓動我的活動。

從我引用的文章中的解釋看,它看起來像是uris的意圖,但我找不到一個簡單的例子。我的網頁鏈接應該是什麼樣的,才能在沒有選擇器的情況下發布?

我見過一對夫婦的例子看起來是這樣的:

<a href="intent:#Intent;action=com.myapp.android.MY_ACTION;end"> 

然而,這似乎並不當我嘗試它的工作。

我的測試設備是銀河標籤2.

任何幫助,將不勝感激。

+0

特別是有人可以向我解釋如何構建該意圖:#Intent類型的URL,因爲它是推薦的方法。 – Chris 2013-03-24 21:08:51

回答

4

根據您的意圖過濾此鏈接應該工作:

<a href="http://mydomain.com/launch">start my app</a> 

但是你要注意的是,Android系統將詢問用戶是否您的應用程序或任何其他瀏覽器應該啓動。

如果你想避免這個實現一個自定義的protcol處理程序。所以只是你的應用程序會聽取這個,用戶不會得到意向選擇器。

嘗試添加該數據的意圖:

<data android:scheme="mycoolapp" android:host="launch" /> 

有了這個鏈接上面的代碼應該工作:

<a href="mycoolapp://launch">start my app</a> 
+0

工作。但它提供了選擇器。即 - 與瀏覽器或應用程序打開...我想要做的是沒有出現。 – Chris 2013-03-24 09:29:56

+0

我剛剛更新了關於該問題的答案 – rekire 2013-03-24 09:31:36

+0

我試過這個時,我得到了一秒。但是,android不鼓勵自定義方案/名稱空間。所以我想按照推薦的方式完成這個工作。 – Chris 2013-03-24 21:06:39

2
<a href="your.app.scheme://other/parameters/here"> 

您的瀏覽器此鏈接將啓動應用程序與特定模式 就像你的意圖

<intent-filter> 
<data android:scheme="your.app.scheme" /> 
<action android:name="android.intent.action.VIEW" /> 
</intent-filter> 
8

我也試圖以推薦的方式啓動應用程序。以下代碼適用於我。

AndroidManifest中的<activity>塊內的代碼YourActivity中的代碼。XML:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="your.activity.namespace.CUSTOMACTION" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

代碼在活動onCreate()方法:

Intent intent = getIntent(); 
if(intent != null && intent.getAction() == "your.activity.namespace.CUSTOMACTION") { 
    extraValue = intent.getStringExtra("extraValueName"); 
    Log.e("AwseomeApp", "Extra value Recieved from intent : " + extraValue); 
} 

對於HTML代碼,寫意圖關於開展具體活動,用行動your.activity.namespace.CUSTOMACTION,和你的應用程序包的名稱your.activity.namespace。你也可以在意圖中加入一些額外的東西。例如intent.putExtra("extraValueName", "WOW")。然後通過在日誌中打印intent.toUri(Intent.URI_INTENT_SCHEME)的值來獲取所需的URL。它應該看起來像:

intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end 

所以,你的HTML代碼應該是這樣的:

<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end"> 
    Launch App 
</a> 

這是按什麼@hackbod從developers.google.com herethis頁面上提示。

4

我需要一個小小的改變abhishek89m'a這個工作的答案。

<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.YourActivity;S.extraValueName=WOW;end"> 
    Launch App 
</a> 

我刪除組件名稱中的斜槓後的「.activity」。

我想補充一點,如果您不想讓應用選擇器顯示,那麼自定義操作可能是解決此問題的最佳解決方案。

p.s.我會將此添加爲評論,但我是新用戶,並且我沒有足夠的聲望點。