solucion - La redirección de URL no funciona en Android a través de Intent-(Error de página no encontrada)
err_too_many_redirects wordpress (5)
El código en mi respuesta a continuación y la redirección correspondiente funcionaron para mí.
En mi Xperia Z Ultra, se ve así:
De acuerdo con la documentation oficial de Android, también debería funcionar en el nivel de API anterior por debajo de 19. Supuse que en la documentación de Chrome se mencionó el número mínimo de API de 19, ya que se dirigía específicamente a los desarrolladores web que querían usar su funcionalidad HTML5.
Dicho esto, esta solución no funciona con mi antiguo Sprint XPRT (Android 2.3.5 - API Level 10) y no funciona en un Nexus S emulado (con una imagen antigua de KitKat). Dice "página web no encontrada" en ambos. Y cuando lo probé en mi XPRT utilizando el navegador, pero ingresé la URL de forma manual, aparece el cuadro de diálogo "No se pudo establecer una conexión segura". Desafortunadamente, la eliminación de la ''s'' en https tampoco funciona, ya que redirige a la versión segura, y sigo obteniendo "No se pudo establecer una conexión segura".
Respuesta anterior:
Si sigues ese tutorial Chrome WebView exactamente. Llegarás a esta parte. El énfasis en negrita es mío.
Manejo de navegación
Ahora intente cambiar la URL que está cargando a http://www.html5rocks.com/ y vuelva a ejecutar su aplicación. Notarás algo extraño.
Si ejecuta la aplicación ahora con un sitio que tiene una redirección como html5rocks.com, su aplicación terminará abriendo el sitio en un navegador en el dispositivo, no en su WebView , probablemente no sea lo que esperaba. Esto se debe a la forma en que WebView maneja los eventos de navegación.
Aquí está la secuencia de eventos:
WebView intenta cargar la URL original desde el servidor remoto y obtiene un redireccionamiento a una nueva URL.
La vista web comprueba si el sistema puede manejar un intento de visualización de la URL, si es así, el sistema maneja la navegación de la URL; de lo contrario, la vista web navegará internamente (es decir, el usuario no tiene un navegador instalado en su dispositivo).
El sistema elige la aplicación preferida del usuario para manejar un esquema de URL http: //, es decir, el navegador predeterminado del usuario. Si tiene más de un navegador instalado, puede ver un cuadro de diálogo en este punto.
En otras palabras, si detiene el tutorial en este punto, obtendrá el comportamiento que desea.
Aquí está el código real en caso de que el tutorial a ese tutorial deje de funcionar:
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>
Además, para cualquier otra persona que lea esto, no estoy mencionando el permiso necesario de INTERNET en el manifiesto porque la persona original que pregunta ya tiene esa parte cubierta.
Tengo este codigo
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);
}
});
Técnicamente, este código funciona para enviar a la persona a esa url, pero por alguna razón, esta URL en particular va a una página que no se encuentra en este código, pero se procesa si coloca esta url en un navegador. Pero cuando se hace desde la aplicación va a la página no encontrada. Estoy probando con el navegador Safari de Android.
¿Es debido a la redirección en la URL? ¿Y cómo podría arreglar esto?
Tengo esta línea en mi archivo de manifiesto:
<uses-permission android:name="android.permission.INTERNET" />
NOTA:
La conexión a Internet NO es el problema. Este código funciona para otras URL. Es algo extraño que está pasando con este enlace específico.
¡Gracias!
Hay ciertos errores disponibles con los navegadores.
El soporte para SPDY y HTTP / 2 está limitado a ciertas versiones modernas de los navegadores Google Chrome, Opera, Firefox, Safari e Internet Explorer. Para obtener información más detallada, visite http://caniuse.com/spdy para saber qué navegadores son compatibles con SPDY y http://caniuse.com/http2 para saber qué navegadores son compatibles con HTTP / 2.
Todos los navegadores solo admiten SPDY y HTTP / 2 a través de una conexión TLS. Por lo tanto, se debe utilizar HTTPS para aprovechar SPDY o HTTP / 2.
Cuando intento el enlace en el navegador Chrome, dice "Página web no disponible". Pero cuando intento lo mismo en el navegador Opera, se abre.
En el navegador Chrome dice "ERR_SPDY_PROTOCOL_ERROR". Mientras navego por Internet, dice, es que el error existe en el navegador Chrome. Una de las posibles soluciones es probar la solución alternativa mencionada en este link referencia link
Intenta actualizar los navegadores disponibles en tu móvil a la última versión.
El sitio real puede estar fuera de servicio por mantenimiento.
Si instaló "Avast App en su móvil", intente agregar el enlace
Las sesiones SPDY en Chrome se pueden inspeccionar a través del URI: chrome: // net-internals / # events & q = type: SPDY_SESSION% 20is: active. Podrías encontrar algo como esto allí:
SPDY habilitado: verdadero
Usar protocolo alternativo: verdadero
Fuerza SPDY Siempre: falso
Forzar SPDY sobre SSL: verdadero
Protocolos siguientes: http / 1.1, spdy / 2, spdy / 3
Si acaba de configurar la opción "SPDY Enabled" en falso, el problema se resolvería después de eso, se usará HTTP para la comunicación web.
- A veces avast también puede causar el problema si instaló la aplicación avast en su móvil. Vaya a Configuración> Protección activa> Personalizar Web Shield> Exclusiones> Agregar "su enlace aquí".
Esperemos que pueda ayudarte .. en algún caso !!. Perdón por mi mal ingles.
Fuente recolectada de internet.
Si obtiene el error de "No se encuentra la página" en el navegador Safari de Android, puede abrir el enlace en el navegador Chrome que tienen muchos dispositivos o puede dar al usuario la opción de seleccionar la aplicación del navegador que abrirá el enlace en el navegador seleccionado.
Para abrir el enlace en el navegador Google Chrome, debe verificar si está instalado en el dispositivo. para eso puedes usar este método para verificar si el navegador Chrome está instalado o no.
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;
}
}
El nombre de paquete del navegador Chrome es com.android.chrome
. tienes que establecer esto como nombre del paquete usando browserIntent.setPackage("com.android.chrome");
Para mostrar las opciones al usuario para seleccionar la aplicación, puede crear así:
Intent chooserIntent = Intent.createChooser(browserIntent, "Select Application");
startActivity(chooserIntent);
Aquí está su código final:
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);
}
Pero tenga en cuenta que si da la opción de seleccionar la aplicación del navegador, el navegador Safari también aparecerá en la lista.
o también puede tener la opción de usar Webview
como contestó
Espero que esto te ayude.
su código está abierto la url en el navegador del dispositivo si la redirección no funciona, definitivamente el problema no está en su código. puede deberse a que la redirección en el sitio web no funciona o el navegador que está utilizando no puede realizar esta redirección. en su caso, supongo que el navegador que está utilizando no puede realizar la redirección.
Use this
Uri uri = Uri.parse (" https://www.bluehost.com/track/businessplan/ "); startActivity (Intent.createChooser (new Intent (Intent.ACTION_VIEW, uri), "Elegir navegador"));