How do I pass parameters to android Intent in new

2019-01-10 15:46发布

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.

4条回答
Emotional °昔
2楼-- · 2019-01-10 15:49

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.

查看更多
在下西门庆
3楼-- · 2019-01-10 15:55

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楼-- · 2019-01-10 15:57

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
查看更多
smile是对你的礼貌
5楼-- · 2019-01-10 16:07

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.

查看更多
登录 后发表回答