Chris
Chris

Reputation: 124

Android Intent launch from browser

This topic has been covered before, but I can't find an answer specific to what I'm asking.

Where I am: I followed hackmod's first piece of advice here: Make a link in the Android browser start up my app? and got this to work with a link in the webpage.

However, I'm having trouble understanding the second option (intent uri's). here's what I've got:

    <activity android:name="com.myapps.tests.Layout2"
        android:label="Auth Complete"
        >
        <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="http" android:host="mydomain.com"
                android:path="/launch" />
        </intent-filter>
    </activity>

Now, with that I can go to "mydomain.com/launch" and it launches my activity. this all works well, except that I get the chooser. what I want is for it to just launch my activity without giving options.

From the explanation in the post I referenced it looks like thats what intent uris are for,but I can't find a straightforward example. what should my link in my webpage look like in order to launch this with no chooser?

I've seen a couple of examples that look something like this:

<a href="intent:#Intent;action=com.myapp.android.MY_ACTION;end">

However, that doesn't seem to work when I try it.

My test device is a Galaxy Tab 2.

any help would be appreciated.

Upvotes: 4

Views: 14515

Answers (4)

robal1991
robal1991

Reputation: 61

I needed a small change to abhishek89m'a answer to make this work.

<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.YourActivity;S.extraValueName=WOW;end">
    Launch App
</a>

I removed ".activity" after the slash in component name.

And I want to add, that custom action is probably the best answer to this problem if you don't want the app chooser to show up.

p.s. I would add this as comment, but I'm a new user and I don't have enough reputation points.

Upvotes: 6

abhishek89m
abhishek89m

Reputation: 261

I was also trying to launch the app in the recomended way. The following code worked for me.

Code inside the <activity> block of YourActivity in AndroidManifest.xml :

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
    <action android:name="your.activity.namespace.CUSTOMACTION" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

Code in the activities onCreate() method :

Intent intent = getIntent();
if(intent != null && intent.getAction() == "your.activity.namespace.CUSTOMACTION") {
    extraValue = intent.getStringExtra("extraValueName");
    Log.e("AwseomeApp", "Extra value Recieved from intent : " + extraValue);
}

For the code in HTML, write an intent for launching the specific Activity, with the action your.activity.namespace.CUSTOMACTION, and your application package name your.activity.namespace. Your can also put some extra in the intent. For example intent.putExtra("extraValueName", "WOW"). Then get the required URL by printing the value of intent.toUri(Intent.URI_INTENT_SCHEME) in the Log. It should look like :

intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end

So your HTML code should look like :

<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end">
    Launch App
</a>

This is as per what @hackbod suggested in here and this page from developers.google.com.

Upvotes: 8

dotmido
dotmido

Reputation: 1384

<a href="your.app.scheme://other/parameters/here">

This link on your browser will launch the app with the specific schema like that on your intent

<intent-filter>
<data android:scheme="your.app.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>

Upvotes: 2

rekire
rekire

Reputation: 47945

Depending on your intent filter this link should work:

<a href="http://mydomain.com/launch">start my app</a>

But you should note that the android system will ask the user if your app or any other browser should be started.

If you want to avoid this implement a custom protcol handler. So just your app will listen for that and the user won't get the intent chooser.

Try to add this data intent:

<data android:scheme="mycoolapp" android:host="launch" />

With the code above this link should work:

<a href="mycoolapp://launch">start my app</a>

Upvotes: 7

Related Questions