我有这个代码:
Button bluehost = (Button)findViewById(R.id.bluehost); bluehost.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.bluehost.com/track/businessplan/")); startActivity(browserIntent); } });
从技术上讲,此代码可以将此人发送到该URL,但由于某种原因,此特定URL会转到此代码中找不到的页面,但是如果您将此URL放入浏览器中则会呈现.但是当从应用程序完成时,它转到页面未找到.我正在使用Android Safari浏览器进行测试.
是因为URL的重定向吗?我怎么能解决这个问题呢?
我在清单文件中有这一行:
注意:
互联网连接不是问题.此代码适用于其他URL.这个具体的链接正在发生一些奇怪的事情.
谢谢!
我在下面的回答中的代码和相应的重定向对我有用.
在我的Xperia Z Ultra上,它看起来像这样:
根据官方Android 文档,它也应该适用于19以下的api级别.我假设Chrome文档提到了最低api级别19,因为它专门针对想要使用其HTML5功能的Web开发人员.
话虽这么说,这个解决方案不适用于我的旧版Sprint XPRT(Android 2.3.5 - API Level 10),并且它不适用于模拟的Nexus S(其上有一个旧的KitKat图像).它说"两个网页都找不到".当我使用浏览器在我的XPRT上进一步尝试它,但是手动输入了URL时,我得到了"无法建立安全连接"的对话框.不幸的是,删除https中的's'也不起作用,因为它重定向到安全版本,我仍然得到"无法建立安全连接".
早期答案:
如果您完全按照Chrome WebView 教程进行操作.你会得到这个部分.大胆的重点是我的.
处理导航
现在尝试将您正在加载的URL更改为 http://www.html5rocks.com/并重新运行您的应用程序.你会注意到一些奇怪的东西.
如果您现在使用具有html5rocks.com重定向的站点运行应用程序,您的应用程序最终会在设备上的浏览器中打开该站点,而不是在WebView中 - 可能不是您所期望的.这是因为WebView处理导航事件的方式.
这是事件的顺序:
WebView尝试从远程服务器加载原始URL,并获取重定向到新URL.
WebView检查系统是否可以处理URL的视图意图,如果是,系统将处理URL导航,否则WebView将在内部导航(即用户未在其设备上安装浏览器).
系统选择用户首选的应用程序来处理http:// URL方案 - 即用户的默认浏览器.如果您安装了多个浏览器,此时可能会看到一个对话框.
换句话说,如果您此时停止教程,您将获得所需的行为.
以下是实际代码,以防该教程的链接停止工作:
MainActivity.java
public class MainActivity extends Activity { private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.activity_main_webview); mWebView.loadUrl("https://www.bluehost.com/track/businessplan/"); } @Override public void onBackPressed() { if(mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } } }
activity_main.xml中
tools:ignore="MergeRootFrame">
此外,对于其他读这篇文章的人,我没有在清单中提及所需的INTERNET许可,因为原来的人已经要求覆盖该部分.