【发布时间】:2016-02-24 17:33:41
【问题描述】:
当我将 url 加载到 WebView 并尝试打开链接时,其中一些会显示如下错误页面:
net::ERR_UNKNOWN_URL_SCHEME intent://maps.yandex.ru?utm_medium=tab...
如何打开此链接,或者至少检查是否安装并运行了适当的应用程序?
我尝试通过实现自定义 WebViewClient 来覆盖 url 加载:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.startsWith("http")) {
getActivity().startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)));
return true;
}
return false;
}
但在这种情况下,应用程序会因 ActivityNotFoundException 而崩溃。
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://maps.yandex.ru?utm_medium=tab-maps&text=магазин&utm_source=serp&yandexuid=2258091361456330110 }
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1798)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Activity.startActivityForResult(Activity.java:3930)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Activity.startActivityForResult(Activity.java:3890)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Activity.startActivity(Activity.java:4213)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.Activity.startActivity(Activity.java:4181)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at ru.uxapps.voicesearch.FWeb$CustomWebViewClient.shouldOverrideUrlLoading(FWeb.java:70)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:325)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:266)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:37)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.os.Looper.loop(Looper.java:148)
02-24 20:58:51.886 31255-31255/ru.uxapps.voicesearch W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
02-24 20:58:51.887 31255-31255/ru.uxapps.voicesearch W/System.err: at java.lang.reflect.Method.invoke(Native Method)
即使安装了所需的应用程序,应用程序也会崩溃。但是如果在 Chrome 中打开这个链接,它会显示 maps.yandex.ru 网站,或者如果安装了应用程序会打开。
是否有适用于所有 intent:// 链接的通用 解决方案? 感谢您的建议。
【问题讨论】:
-
“但在这种情况下,应用程序会因 ActivityNotFoundException 而崩溃”——请编辑您的问题并发布完整的堆栈跟踪。你有安装这个应用程序吗? “或者至少检查是否安装了适当的应用程序” - 鉴于
Uri,您应该能够获得maps.yandex.ru值(getHost(),如果我不得不猜测),然后使用PackageManager看看是否它就在那里。 -
@CommonsWare 感谢您的关注,我已经更新了答案。我正在寻找使所有意图://链接正常工作的通用解决方案。
-
看看如何构建正确的intent uri:developer.chrome.com/multidevice/android/intents
-
@gsgsgs 问题是如何通过意图 uri 运行活动
标签: android android-intent webview