当前位置:  开发笔记 > 编程语言 > 正文

URL重定向无法通过Intent在Android中运行 - (找不到页面错误)

如何解决《URL重定向无法通过Intent在Android中运行-(找不到页面错误)》经验,为你挑选了1个好方法。

我有这个代码:

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.这个具体的链接正在发生一些奇怪的事情.

谢谢!



1> Stephan Bran..:

我在下面的回答中的代码和相应的重定向对我有用.

在我的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许可,因为原来的人已经要求覆盖该部分.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有