Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open Android app from URL using intent-filter not working

I have an Android app that people use as a replacement for a website. Hence, when users encounter an URL to the website, I want to give them the option to "open the URL" in my app instead of in the browser. In other words I want the popup to appear that lets them choose between my app and the browser (and possibly other apps).

I understand from various sources that I need to add an intent filter to an activity in my app with the 'data' filter that filters on URLs of the correct form.

The website in question is http://members.iracing.com, hence I have added the following intent filter:

    <activity         android:name=".MainActivity"         android:label="@string/title_activity_main" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>         <intent-filter>             <action android:name="android.intent.action.VIEW" />             <category android:name="android.intent.category.DEFAULT" />             <data android:scheme="http" />             <data android:host="members.iracing.com" />         </intent-filter>     </activity> 

I have tried various forms of these data filters, like using a single 'data' node with both attributes:

        <intent-filter>             <action android:name="android.intent.action.VIEW" />             <category android:name="android.intent.category.DEFAULT" />             <data android:scheme="http" android:host="members.iracing.com"/>         </intent-filter> 

It is simply not working. I don't know what else to tell you. I hosted a simple HTML page on my website with a couple links to various pages on that website (all starting with "http://members.iracing.com/...") and when I click any of them, they simply open in the browser without ever asking me which app I want to use. I tried it both on the emulator as well as after installing the app on my physical device, nothing works. I tried this in a completely BLANK, new Android project just to see if that would work, nothing.

I then realized that the website requires authentication, and if you are not logged in it redirects to the login page at https://members.iracing.com/membersite/login.jsp, hence I tried replacing the scheme by "https". I even tried changing the host to "www.members.iracing.com", and in the end I even tried a combination of all these things (not sure if this should work, but hey, I'm desperate at this point.....)

       <intent-filter>             <action android:name="android.intent.action.VIEW" />             <category android:name="android.intent.category.DEFAULT" />             <data android:scheme="http" />             <data android:scheme="https" />             <data android:host="members.iracing.com" />             <data android:host="www.members.iracing.com" />         </intent-filter> 

Still no go. I'm not sure if the redirect is relevant though, the browser clearly first goes to the non-redirected site, then does the redirect to the login page, but at no point do I get the choice to open it in my app. Furthermore, if I login manually in the browser first, there is no redirect, and it still does not work.

Am I missing something obvious here? I'm pulling my hair out why this isn't working, and I cannot debug it besides trying every possible combination I could think of (I did...). Thanks for any help!

like image 521
Nick Thissen Avatar asked Nov 08 '12 13:11

Nick Thissen


People also ask

How do I open a URL from an intent?

To open a URL/website you do the following: String url = "http://www.example.com"; Intent i = new Intent(Intent. ACTION_VIEW); i.

How do you get a URL to hit an Android app?

Open your mobile phone network setting and set the http proxy and then you can grab request from you android app. Charles download url https://www.charlesproxy.com/。 Open WIFI wireless hotspot on your computer then connect to the hotspot。 Now you can use wireshark or httpScoop to grab request from you android app.

Is intent deprecated?

The Intent is not deprecated the problem is with your itemClickable. class because it is not recognized.


1 Answers

I thought I will post this here since I spent some time looking into why my intent filter did not work. It turns out that it was working all along but matches are exact. Thus if you register your intent for http://myexample.com and you click in http://myexample.com/blah it will not work.

Adding the following fixed the issue:

<data android:pathPattern="/.*" /> 

So the intent filter looks like:

<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:host="example.com" />             <data android:scheme="https" />             <data android:pathPattern="/.*" /> </intent-filter> 
like image 144
nurieta Avatar answered Sep 23 '22 14:09

nurieta