26

我有一个 web 应用程序通过 iframe 意图调用 android 上的本机应用程序,根据以下内容在 chrome 25 中不起作用......

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

意图的结构如下......

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

在新的 intent:// 方案中,我将如何将 app:// 之后列出的参数传递给本机应用程序?我一直找不到一个例子。

4

4 回答 4

62

使用新方案,您可以将参数作为附加参数传递给应用程序,但您必须对 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'

例如,如果我们想传递两个额外的参数,一个 Integer 和一个 String,我们可以这样做:

<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 应用中,您需要接受这些附加功能。在 Activity 的“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 ,如链接所示。

于 2014-01-23T09:58:31.240 回答
8

对于方案 URL:

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

您可能希望映射到以下意图 URL:

intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end
于 2013-11-12T23:37:23.927 回答
5

您不能再使用 iframe 和自定义协议来打开原生应用程序。

但是,您可以使用现有的intent:// 语法来启动和意向并向其传递数据,如果未安装,它还具有将用户带到 Play 商店的额外好处。

您可以在语法的“路径”部分中对数据进行编码,以便您可以拥有intent://play/?a=1#Intent;......;end;,也可以将其编码为 Extra。

于 2013-05-30T11:57:06.333 回答
4

Intents 在 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)

如果您的应用程序未安装,这将打开商店,如果应用程序已安装,则使用您的解码参数打开带有意图数据的应用程序。

希望这可以帮助

于 2015-08-18T15:00:04.453 回答