java - 如何调整我的 WebViewActivity 类以打开 market:// 和 intent:// 链接
问题描述
我正在构建一个集成不同优惠墙的应用程序,其中大部分是通过SDK实现的,但其中一些需要通过直接链接打开,所以我需要在Web View中打开这些。
我可以通过直接链接打开优惠墙,但是,我注意到其中的一些优惠包含 market:// 或 intent:// 链接,当我尝试点击其中一个链接时收到一个大错误.
这是我的 WebViewActivity.java:
public class WebViewActivity extends AppCompatActivity {
public static final String WEBSITE_ADDRESS = "website_address";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = getIntent().getStringExtra(WEBSITE_ADDRESS);
if (url == null || url.isEmpty()) finish();
setContentView(R.layout.activity_webview);
WebView webView = (WebView) findViewById(R.id.nyc_poi_webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl(url);
}
}
如前所述,它适用于 HTTP 和 HTTPS 链接,但不适用于 market:// 或 intent://
你能给我一些关于如何实现我想要的提示吗?
谢谢!
解决方案
您可以使用shouldOverrideUrlLoading
方法来否认错误。下面我举了一个例子。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getScheme().equals("market")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
Activity host = (Activity) view.getContext();
host.startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
// Google Play app is not installed, you may want to open the app store link
Uri uri = Uri.parse(url);
view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
return false;
}
}
return false;
}
});
推荐阅读
- go - 如何强制 Protobuf 3 字段?
- frontend - 要成为优秀的前端开发人员,我应该学习什么?
- android - Dart:尝试运行 .dart 文件时未找到 UI
- react-native - React Native 动画无法改变背景颜色
- javascript - 有人可以帮我做一个有效的计时器吗
- javascript - VSCode 的格式化程序,在冒号前放置一个空格
- php - 可以找到一个 PHP 类,但不能找到另一个
- c# - 如何在 C# 的计算器中添加十个结果的变化历史?
- node.js - 如何处理路线中缺少的参数?表达
- php - 仅使用 php 中的 prepare 语句更新特定字段