gpt4 book ai didi

android - 如何处理 Intent ://on a webView URL?

转载 作者:IT老高 更新时间:2023-10-28 23:29:14 28 4
gpt4 key购买 nike

我目前正在开发一个带有 webView 的 android 应用程序。在某些 urls 上,我需要使用 shouldOverrideUrlLoading 方法,该方法非常简单:

if(url.startsWith("something")){
//do something
return true;
}

我的问题:

某些 URLS,例如在 google 搜索中,具有以下 URL 方案:

intent://en.m.wikipedia.org/wiki/Test_cricket#Intent;scheme=http;package=org.wikipedia;S.browser_fallback_url=https%3A%2F%2Fwww.google.pt%2Fsearchurl%2Fr.html%23app%3Dorg.wikipedia%26pingbase%3Dhttps%3A%2F%2Fwww.google.pt%2F%26url%3Dhttps%3A%2F%2Fen.m.wikipedia.org%2Fwiki%2FTest_cricket;S.android.intent.extra.REFERRER_NAME=https%3A%2F%2Fwww.google.pt;launchFlags=0x8080000;end

我尝试过使用:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);

但我得到一个错误:

10-15 15:18:15.546: W/System.err(29086): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://en.m.wikipedia.org/wiki/Test_cricket }

我应该如何处理这种URL方案?


更新:

根据@CommonsWare 的评论,我尝试在 Intent 上使用 parseUri()URL 创建一个 Intent 对象 然后尝试 startActivity(),类似:

Intent myIntent = new Intent().parseUri(url, Intent.URI_INTENT_SCHEME);
startActivity(myIntent);

但我仍然得到:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://en.m.wikipedia.org/wiki/Test_cricket flg=0x8080000 pkg=org.wikipedia (has extras) }

我的说明可能有误,或者我根本无法按照@CommonsWare 指定的方式构造 intent。关于如何构造 Intent 的任何提示?

最佳答案

此处描述了此 Intent URL 的结构 https://developer.chrome.com/multidevice/android/intents .

所以我们可以像这样在内部 WebView 中处理它:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("intent://")) {
try {
Context context = view.getContext();
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);

if (intent != null) {
view.stopLoading();

PackageManager packageManager = context.getPackageManager();
ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (info != null) {
context.startActivity(intent);
} else {
String fallbackUrl = intent.getStringExtra("browser_fallback_url");
view.loadUrl(fallbackUrl);

// or call external broswer
// Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fallbackUrl));
// context.startActivity(browserIntent);
}

return true;
}
} catch (URISyntaxException e) {
if (GeneralData.DEBUG) {
Log.e(TAG, "Can't resolve intent://", e);
}
}
}

return false;
}

关于android - 如何处理 Intent ://on a webView URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com