如何在chrome上的新方案中将参数传递给android Intent?

时间:2013-05-24 15:13:44

标签: android google-chrome mobile iframe android-intent

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

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

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

应用://的RequestType =测试和安培;类型= 123&安培; TN = 0000000000

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

4 个答案:

答案 0 :(得分:53)

使用新方案,您可以将参数作为附加内容传递给App,但您必须按如下方式对URI进行编码:

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

这将传递一个名为“myextra”的额外String,其值为“mystring”。看一下Android Code,我们可以看到需要如何编码额外的参数。 “myextra”参数开头的“ S ”将其定义为String。其他类型可以是:

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应用中,您需要接受这些额外内容。在您的活动的“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 ,如this link所示。

答案 1 :(得分:6)

对于方案网址:

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

您可能希望映射到以下目标网址:

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

答案 2 :(得分:3)

您无法再使用iframe和自定义协议打开原生应用。

然而,您可以使用现有的intent:// syntax来启动和意图传递数据,如果没有安装,则可以将用户带到Play商店。

您可以在文档的“路径”部分对数据进行编码,这样您就可以拥有intent://play/?a=1#Intent;......;end;,或者可以将其编码为Extra。

答案 3 :(得分:3)

4.4.4之后意图不起作用,所以这就是我为我的应用做的事情。

使用以下intent过滤器

创建自定义方案以在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) 使用后备网址构建市场网址,通过上面创建的自定义方案打开您的应用。

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)

如果您的应用未安装,则会打开商店,如果已安装应用,则会使用已解码的参数打开带有目标数据的应用。

希望这有帮助