Android - невозможно открыть URL в браузере - PullRequest
2 голосов
/ 13 марта 2011

Я пытаюсь открыть ссылку во внешнем браузере, поэтому в своей деятельности у меня есть этот код:

// 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));

Работает как положено, но время от времени я получаю эту ошибку. Есть идеи, почему и как с этим справиться?

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)

1 Ответ

3 голосов
/ 13 марта 2011

Я бы справился с этим, поймав исключение и попросив пользователя приобрести настоящее устройство Android.: -)

Серьезно, https является частью браузера .Единственный способ увидеть, где это исключение может возникнуть, - это если кто-то использует модемное ПЗУ или какое-нибудь устройство Android с червячной головкой, где они испортили файл манифеста браузера.

Вы также можете использовать PackageManager и * 1009.* заранее определить, что вызов startActivity() не удастся, и в этом случае вы могли бы ... ммм ... сделать что-то ...

Кстати, я предполагаю, что ваш URL-адрес соответствует.Если ваш URL-адрес отличается, то проблема может быть в том, что вы используете конкретный сервер.Если он отправляет перенаправление на URL-адрес HTTPS, который не относится к стандартным MIME-типам браузера, я вижу, что эта ошибка возникает.В этом случае вы можете записать URL-адреса, которые вызывают у вас горе, и посмотреть, видите ли вы там шаблон.

...