我有一个webview,点击一些横幅,我发送Intent.ACTION_VIEW打开浏览器或任何用户认为合适的东西:
w.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("http://")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
return false;
}
}
});
现在我想要的是找到一种方法来了解用户是否只是在打开浏览器之前按回按钮或者他实际打开了浏览器。我发现了this问题,但没有解决方案
答案 0 :(得分:2)
您可以做一件可能不是最佳实践的事情,但我认为这将解决您的问题
初始化=> 布尔值isPageLoading = false;
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
public void onPageFinished(WebView view, String url) {
isPageLoading = false;
}
public void onPageStarted(WebView view, String url, Bitmap favicon){
isPageLoading = true;
}
});
现在你有正确的指示器,它会说明页面是否正在加载。
现在您的活动覆盖后退按键事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) { // Back key pressed
if(isPageLoading){
// Do the tasks you want to do when page is loading
}else{
// Do the tasks you want to do when page loading is finished (or not in progress)
}
return true;
}
return super.onKeyDown(keyCode, event);
}
请注意,您可以通过添加更多布尔变量来更改此功能的行为,这些变量将指示不同的状态信息(例如页面加载是否已开始等)
希望这会解决你提出的问题
答案 1 :(得分:1)
另一种可能的解决方案:使用startActivityForResult(intent, 1)
代替startActivity(intent)
并以这种方式检查requestCode
和resultCode
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
//intent 1 was
if(resultCode == Activity.RESULT_OK) {
//successful
} else {
//not succusseful
}
}
}
这适用于大多数意图(电子邮件,相机等)