簡體   English   中英

如何在 chrome 上的新方案中將參數傳遞給 android Intent?

[英]How do I pass parameters to android Intent in new scheme on chrome?

我有一個 Web 應用程序通過 iframe 意圖調用 android 上的本機應用程序,該意圖在 chrome 25 中不起作用,具體如下....

https://developers.google.com/chrome/mobile/docs/intents

意圖的結構如下......

app://Requesttype=Testing&Type=123&tn=0000000000

在新的 intent:// 方案中,我將如何將 app:// 之后列出的參數傳遞給本機應用程序? 我一直沒能找到一個例子。

使用新方案,您可以將參數作為附加參數傳遞給應用程序,但必須按如下方式對 URI 進行編碼:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.myextra=mystring;end">Do Whatever</a>

這將傳遞一個名為“myextra”的額外字符串,其值為“mystring”。 看看Android 代碼,我們可以看到額外的參數需要如何編碼。 “myextra”參數開頭的“ S ”將其定義為字符串。 其他類型可以是:

String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'

例如,如果我們想傳遞兩個額外的參數,一個整數和一個字符串,我們可以這樣做:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;i.age=35;end">Do Whatever</a>

請注意,您需要對所有參數進行 url 編碼。

在您的 Android 應用中,您需要接受這些附加功能。 在您的活動的“onCreate”事件中:

Bundle parametros = getIntent().getExtras();
if (extras != null){
    String name = extras.getString("name");
    Integer age = extras.getInt("age");

    if (name!=null && age!=null)
    {
       //do whatever you have to
       //...
    }
}else{
     //no extras, get over it!!
}

而且,當然,在您的清單中添加過濾器android.intent.category.BROWSABLE如此鏈接所示。

對於方案 URL:

appname://RequestType/?Type=123&tn=0000000000

您可能想要映射到以下意圖 URL:

intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end

您不能再使用 iframe 和自定義協議來打開本機應用程序。

但是,您可以使用現有的Intent:// 語法來啟動和 Intent 並傳遞數據,如果未安裝它,它還有一個額外的好處是將用戶帶到 Play 商店。

您可以按照文檔記錄在語法的“路徑”部分中對數據進行編碼,以便您可以使用intent://play/?a=1#Intent;......;end; 或者您可以將其編碼為 Extra。

意圖在 4.4.4 之后不起作用,所以這就是我為我的應用程序所做的。

創建自定義方案以使用以下意圖過濾器在 AndroidManifest.xml 中啟動我的活動

1)

 <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="<<YOUR UNIQUE SCHEME(I SUGGEST YOUR PACKAGE NAME)"/>
</intent-filter>

2) 使用后備 url 構建市場 url,它通過上面創建的自定義方案打開您的應用程序。

market://details?id=<<your app package from AndroidManifest.xml>>&url=<<your app custom scheme from AndroidManifest.xml>>://yourdomain.com?encoded(p1=v1&p2=v2....etc)

如果您的應用程序未安裝,這將打開商店,如果應用程序已安裝,則使用您的解碼參數打開帶有意圖數據的應用程序。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM