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

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

I have a web app calling a native app on android via an iframe intent which does not work in chrome 25 according to the following....

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

The intent was structured like the following....

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

In the new intent:// scheme how would I go about passing the parameters listed after app:// to the native application? I haven't been able to find an example.

回答1:

With the new scheme, you can pass arguments as extras to the App, but you must encode the URI as follows:

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

This will pass an extra String called "myextra" with the value "mystring". Having a look at the Android Code we can see how the extra parameters need to be coded. The "S" at the beginning of the "myextra" parameter defines it as a String. Other types can be:

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

For example, if we want to pass two extra parameters, an Integer and a String, we can do this:

<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> 

Note that you'll need to url-encode all the parameters.

In your Android app, you'll need to accept those extras. In the "onCreate" event of your Activity:

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!! } 

And, of course, add the filter android.intent.category.BROWSABLE in your manifest as shown in this link.



回答2:

For the scheme URL:

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

You would want to map to an intent URL of:

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


回答3:

Intents are not working after 4.4.4, So this is what i am doing for my app.

created custom scheme to launch my activity in the AndroidManifest.xml with the following intent filter

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) Construct market url with fallback url which opens your app through custom scheme created above.

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)

this opens the store if your app is not installed, and opens the app with the intent data if the app is already installed, with your decoded parameters.

Hope this helps



回答4:

You can no longer use an iframe and custom protocol to open a native app.

You can however use the existing intent:// syntax to launch and intent and pass it data, it has the added benefit of taking the user to the Play store if it is not installed.

You either encode the data in the "path" part of the syntax as documented so you could have intent://play/?a=1#Intent;......;end; or you could encode it as an Extra.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!