URL重定向无法通过Intent在Android中工作-(未找到页面错误)
我有以下代码:URL重定向无法通过Intent在Android中工作-(未找到页面错误),android,mobile-browser,Android,Mobile Browser,我有以下代码: 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("h
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上的重定向吗?我怎样才能解决这个问题
我的清单文件中确实有这一行:
<uses-permission android:name="android.permission.INTERNET" />
注:
互联网连接不是问题。此代码适用于其他URL。这是一个奇怪的事情,发生在这个特定的链接
谢谢 下面我的答案中的代码和相应的重定向对我有效 在我的Xperia Z Ultra上,它看起来像这样: 根据官方的安卓系统,它也应该在之前低于19的api级别上工作。我假设Chrome文档提到了最低api级别19,因为它专门针对希望使用HTML5功能的web开发人员 也就是说,这个解决方案在我以前的Sprint XPRT(Android 2.3.5-API级别10)上不起作用,在模拟Nexus S(上面有KitKat的旧图像)上也不起作用。在这两个页面上都显示“未找到网页”。当我使用浏览器在我的XPRT上进一步尝试它,但手动输入url时,我得到的对话框是“无法建立安全连接”。不幸的是,删除https中的“s”也不起作用,因为它会重定向到安全版本,而我仍然得到“无法建立安全连接” 前面的答案: 如果你完全按照Chrome的网络视图。你将进入这一部分。粗体的强调是我的 处理导航 现在尝试更改加载到的URL 然后重新运行应用程序。你会注意到的 奇怪的事 如果您现在使用具有重定向的站点运行应用程序,如 html5rocks.com,您的应用程序最终会在浏览器中打开网站 设备,不在您的网络视图中——可能不是您所期望的。这是 因为WebView处理导航事件的方式 以下是事件的顺序:
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>
工具:ignore=“MergeRootFrame”>
另外,对于阅读本文的其他人,我没有在清单中提及所需的互联网许可,因为最初提出请求的人已经涵盖了该部分 如果您在Android Safari浏览器中发现页面未找到错误,则可以在chrome浏览器中打开许多设备具有的链接,或者让用户选择浏览器应用程序,该应用程序将在选定的浏览器中打开链接 要打开google 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
。您必须使用browserint.setPackage(“com.android.chrome”)将其设置为包名代码>
要向用户显示选择应用程序的选项,您可以这样创建:
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);
}
但请注意,如果您提供了选择浏览器应用程序的选项,那么Safari浏览器也会列出
或者您也可以选择使用Webview
,答案如下
我希望这对您有所帮助。浏览器中存在某些可用的bug
对SPDY和HTTP/2的支持仅限于某些现代版本的
Google Chrome、Opera、Firefox、Safari和Internet Explorer浏览器。
有关更多详细信息,请参阅
哪些浏览器支持SPDY和at
哪些浏览器支持HTTP/2
所有浏览器仅支持通过TLS连接的SPDY和HTTP/2。
因此,必须使用HTTPS来利用SPDY或HTTP/2
当我在chrome浏览器中尝试链接时,它会显示“网页不可用”。但当我在opera浏览器中尝试同样的操作时,它会打开
在Chrome浏览器上显示“ERR_SPDY_PROTOCOL_ERROR”。当我冲浪的时候
在互联网上,它说,这是存在于Chrome浏览器中的漏洞
本身可能的解决方案之一是尝试解决方法
本参考文件中提到的
尝试将手机中可用的浏览器更新为最新版本
实际站点可能因维护而停机
如果您在手机中安装了“Avast应用”,请尝试添加链接
可以通过URI检查Chrome中的SPDY会话:chrome://net-internals/#events&q=type:SPDY_SESSION%20is:active.
您可能会在那里找到类似的内容:
SPDY已启用:true
使用备用协议:true
强迫SPDY始终:错误
通过SSL强制SPDY:true
下一个协议:http/1.1、spdy/2、spdy/3
如果您只是将“SPDY Enabled”选项设置为false,那么问题将得到解决,因为在这之后,HTTP将用于web通信<
Use this