URLredirect无法在Android中通过意图 – (找不到网页错误)

我有这个代码:

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浏览器进行testing。

是否因为URL上的redirect? 我怎么能解决这个问题?

我的清单文件中有这行:

 <uses-permission android:name="android.permission.INTERNET" /> 

注意:

互联网连接不是问题。 此代码适用于其他url。 这个特定的链接正在发生一些奇怪的事情。

谢谢!

Solutions Collecting From Web of "URLredirect无法在Android中通过意图 – (找不到网页错误)"

在我的答案下面的代码和相应的redirect为我工作。

在我的Xperia Z Ultra上,看起来像这样:

根据官方的Android 文档 ,它也应该在19以前的API级别上工作。 我认为Chrome文档提到了最低的API级别19,因为它专门针对想要使用其HTML5function的Web开发人员。

这就是说,这个解决scheme不适用于我旧的Sprint XPRT(Android 2.3.5 – API Level 10),它不适用于仿真的Nexus S(具有KitKat旧图像)。 它说在两个“网页找不到” 。 当我使用浏览器进一步在我的XPRT上尝试了它,但手动input了url后,我得到“安全连接无法build立”的对话框。 不幸的是,在https中删除“s”也不起作用,因为它redirect到安全版本,而我仍然得到“无法build立安全连接”。

早些时候回答:

如果您完全按照Chrome WebView 教程进行操作 。 你会到这个部分。 大胆的重点是我的。

处理导航

现在尝试将您要加载的url更改为http://www.html5rocks.com/,然后重新运行您的应用程序&#x3002; 你会注意到一些奇怪的东西

如果您现在使用具有redirect的网站(例如html5rocks.com)运行应用程序,那么您的应用程序最终会在设备上的浏览器中打开该网站,而不是在您的WebView中 – 可能不是您所期望的。 这是因为WebView处理导航事件的方式。

以下是事件的顺序:

  1. WebView尝试从远程服务器加载原始URL,并redirect到一个新的URL。

  2. WebView检查系统是否可以处理该URL的查看意图,如果是的话系统处理URL导航,否则WebView将在内部导航(即,用户没有在其设备上安装浏览器)。

  3. 系统select用户首选的应用程序来处理http:// URLscheme – 也就是用户的默认浏览器。 如果您安装了多个浏览器,则此时可能会看到一个对话框。

换句话说,如果你刚刚停止教程,你会得到你想要的行为。

下面是实际的代码,以防止该教程的链接停止工作:

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中

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> tools:ignore="MergeRootFrame"> <WebView android:id="@+id/activity_main_webview" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

对于其他读者来说,我也没有提到清单中所需的INTERNET许可,因为原来的人要求已经包含了这个部分。

如果您在Android Safari浏览器中发现页面未find错误,那么您可以在许多设备上的Chrome浏览器中打开链接,或者向用户提供选项以select将在选定浏览器中打开链接的浏览器应用程序。

要打开链接到谷歌Chrome浏览器,你必须检查它是否安装在设备上。 为此,您可以使用此方法来检查是否安装了Chrome浏览器。

 private boolean isPackageInstalled(String packagename, Context context) { PackageManager pm = context.getPackageManager(); try { pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } 

chrome浏览器的打包名是com.android.chrome 。 你必须使用browserIntent.setPackage("com.android.chrome");

为了向用户显示选项来select应用程序,您可以像这样创build:

 Intent chooserIntent = Intent.createChooser(browserIntent, "Select Application"); startActivity(chooserIntent); 

这是你的最终代码:

 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.bluehost.com/track/businessplan/")); boolean isChromeInstalled = isPackageInstalled("com.android.chrome", YourActivityName.this); if (isChromeInstalled) { browserIntent.setPackage("com.android.chrome"); startActivity(browserIntent); }else{ Intent chooserIntent = Intent.createChooser(browserIntent, "Select Application"); startActivity(chooserIntent); } 

但请注意,如果您提供select浏览器应用程序,然后Safari浏览器也列出。

或者您也可以select使用Webview ,并由Stephan Branczyk解答

我希望这可以帮助你。

浏览器有一些缺陷。

对SPDY和HTTP / 2的支持仅限于某些现代版本的Google Chrome,Opera,Firefox,Safari和Internet Explorer浏览器。 有关更多详细信息,请查看http://caniuse.com/spdy了解哪些浏览器支持SPDY,以及http://caniuse.com/http2是哪些浏览器支持HTTP / 2。

所有的浏览器只支持通过TLS连接的SPDY和HTTP / 2。 因此必须使用HTTPS来利用SPDY或HTTP / 2。

当我尝试在Chrome浏览器中的链接,它说,“网页不可用”。 但是,当我在opera浏览器中尝试相同时,它将打开。

在Chrome浏览器上显示“ERR_SPDY_PROTOCOL_ERROR”。 当我在互联网上冲浪时,它说,这是Chrome浏览器本身存在的错误。 可能的解决scheme之一是尝试此参考 链接中 提到的解决方法

  1. 尝试将手机中可用的浏览器更新为最新版本。

  2. 实际网站可能因维护而停机。

  3. 如果您在您的手机上安装了“Avast应用程序”,请尝试添加链接

  4. Chrome中的SPDY会话可以通过URI进行检查:chrome:// net-internals /#events&q = type:SPDY_SESSION%20is:active。 你可能会在这里find这样的东西:

    SPDY已启用:true

    使用备用协议:true

    强制SPDY总是:错误

    通过SSL强制SPDY:true

    Next协议:http / 1.1,spdy / 2,spdy / 3

如果您只是将“SPDY Enabled”选项设置为false,那么问题将被解决,HTTP将用于Web通信。

  1. 有时候avast也可能导致这个问题,如果你在手机上安装avast应用程序。 转到设置>主动防护>自定义网页防护>排除>添加“您的链接在这里”。

希望它可以帮助你..在某些情况下! 对不起,我的英语不好。

来自互联网的资源。

你的代码是打开设备浏览器中的url,如果redirect不工作,绝对不是你的代码的问题。 这可能是因为网站中的redirect不起作用,或者您正在使用的浏览器无法执行此redirect。 在你的情况下,我猜是你正在使用的浏览器无法执行redirect。

 Use this 

Uri uri = Uri.parse(“ https://www.bluehost.com/track/businessplan/ ”); startActivity(Intent.createChooser(new Intent(Intent.ACTION_VIEW,uri),“Choose browser”));