Bostone
Bostone

Reputation: 37126

Android - unable to open URL in the browser

I'm attempting to open a link in external browser so in my activity I have this code:

// usual SSL URL such as https://foo.com but very long since it contains OAuth params
final Uri uri = Uri.parse(url); 
startActivity(new Intent(Intent.ACTION_VIEW, uri));

It works as intended but once in a while I get this error. Any idea why and how to handle it?

android.content.ActivityNotFoundException: No Activity found to handle Intent 
        { act=android.intent.action.VIEW dat=https://api.foo.com }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
at android.app.Activity.startActivityForResult(Activity.java:2836)
at android.app.Activity.startActivity(Activity.java:2942)
at foo.activity.LoginActivity$2.onPostExecute(LoginActivity.java:128)
at foo.activity.LoginActivity$2.onPostExecute(LoginActivity.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4717)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

Upvotes: 2

Views: 2877

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006604

I'd handle it by catching the exception and telling the user to get a real Android device. :-)

Seriously, https is part of the Browser app. The only way I can see where this exception would occur would be if somebody is running a modded ROM or some screwball Android device where they messed up the browser's manifest file.

You could also use PackageManager and queryIntentActivities() to determine in advance that the startActivity() call would fail, in which case you could...ummm...do something...

BTW, I am assuming that your URL is consistent. If your URL varies, then the problem may be with the particular server you're hitting on occasion. If it is issuing a redirect to an HTTPS URL that is not one of the standard browser MIME types, then I can see this error occurring. In that case, you might consider logging the URLs that are giving you grief and see if you see a pattern there.

Upvotes: 3

Related Questions