El redireccionamiento de URL no funciona en Android a través de Intent – (Error de página no encontrada)

Tengo este código:

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 se encuentra. Estoy probando con el navegador Android Safari.

¿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á sucediendo con este enlace específico.

¡Gracias!

El código en mi respuesta a continuación y la redirección correspondiente funcionó para mí.

En mi Xperia Z Ultra, se ve así:

De acuerdo con la documentación oficial de Android, también debería funcionar en el nivel anterior de api por debajo de 19. Asumí que la documentación de Chrome mencionaba el nivel mínimo de api número 19 porque estaba dirigido específicamente a 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 Nivel 10) y no funciona en un Nexus S emulado (con una vieja imagen de KitKat en él). Dice "página web no encontrada" en ambos. Y cuando lo probé en mi XPRT usando el navegador, pero ingresé a la url manualmente, recibí el diálogo que "No se pudo establecer una conexión segura". Desafortunadamente, la eliminación de la 's' en https no funciona tampoco, ya que redirecciona a la versión segura, y todavía obtener "No se pudo establecer una conexión segura".

Respuesta anterior:

Si sigue exactamente este tutorial de Chrome WebView. Llegarás a esta parte. El énfasis en negrita es mío.

Manejo de navegación

Ahora intenta cambiar la URL que estás cargando a http://www.html5rocks.com/ y vuelve a ejecutar tu aplicación. Notará algo extraño.

Si ejecuta la aplicación ahora con un sitio que tiene una redirección como html5rocks.com, su aplicación termina abriendo el sitio en un navegador en el dispositivo, no en su WebView , probablemente no lo que esperaba. Esto se debe a la forma en que el WebView gestiona los eventos de navegación.

Esta es la secuencia de eventos:

  1. WebView intenta cargar la URL original desde el servidor remoto y obtiene una redirección a una nueva URL.

  2. El WebView comprueba si el sistema puede manejar una intención de visualización de la URL, de ser así, el sistema maneja la navegación por URL, de lo contrario WebView navegará internamente (es decir, el usuario no tiene navegador instalado en su dispositivo).

  3. El sistema selecciona 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, es posible que vea un cuadro de diálogo en este momento.

En otras palabras, si acaba de detener el tutorial en este momento, obtendrá el comportamiento que desea.

Aquí está el código real en caso de que el enlace 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> 

También para cualquier persona que lee esto, no estoy mencionando el permiso necesario del INTERNET en el manifiesto porque la persona original que pide ya tiene esa parte cubierta.

Si obtienes el error Página no encontrada en el navegador Safari de Android, puedes abrir el enlace en el navegador de cromo que muchos dispositivos tienen o dan opción al usuario para seleccionar la aplicación del navegador que abrirá el enlace en el navegador seleccionado.

Para abrir el enlace en el navegador de cromo de google tienes que comprobar si está instalado en el dispositivo. Para que pueda utilizar este método para comprobar si el navegador de cromo 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 de cromo es com.android.chrome . Usted tiene que fijar esto como nombre del paquete usando browserIntent.setPackage("com.android.chrome");

Para mostrar las opciones al usuario para seleccionar la aplicación puede crear de esta manera:

 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 le da la opción de seleccionar la aplicación del navegador Safari navegador también se enumeran.

O también puede tener la opción de usar Webview como respondió Stephan Branczyk

Espero que esto te ayude.

Hay ciertos bugs disponibles con los navegadores.

El soporte para SPDY y HTTP / 2 está limitado a ciertas versiones modernas de los navegadores de Google Chrome, Opera, Firefox, Safari e Internet Explorer. Para obtener información más detallada, echa un vistazo a http://caniuse.com/spdy para saber qué navegadores soportan SPDY y en http://caniuse.com/http2 para qué navegadores admiten HTTP / 2.

Todos los navegadores sólo admiten SPDY y HTTP / 2 a través de una conexión TLS. Por lo tanto HTTPS tiene que ser utilizado para aprovechar SPDY o HTTP / 2.

Cuando intento el acoplamiento en el hojeador del cromo dice, el "Web page no disponible". Pero cuando intento lo mismo en el navegador de la ópera, se abre.

En el navegador Chrome, se indica "ERR_SPDY_PROTOCOL_ERROR". Mientras que navego alrededor del Internet que dice, es el insecto existe en el hojeador del cromo sí mismo. Una de las posibles soluciones es probar la solución descrita en este enlace de referencia

  1. Intente actualizar los navegadores disponibles en su móvil a la versión más reciente.

  2. El sitio actual puede estar deshabilitado para mantenimiento.

  3. Si instalaste "Avast App en tu móvil", intenta agregar el enlace

  4. Las sesiones SPDY en Chrome se pueden inspeccionar a través del URI: chrome: // net-internals / # events & q = tipo: SPDY_SESSION% 20is: active. Usted puede encontrar algo como esto allí:

    SPDY habilitado: true

    Usar protocolo alternativo: true

    Fuerza SPDY Siempre: false

    Fuerza SPDY sobre SSL: true

    Protocolos siguientes: http / 1.1, spdy / 2, spdy / 3

Si acaba de establecer la opción "SPDY Enabled" en false, el problema se resuelve como después de eso, HTTP se utilizará para la comunicación web.

  1. 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> Agregue "su enlace aquí".

Esperemos que pueda ayudarle .. en algunos casos !!. Perdón por mi mal ingles.

Fuente recogida de Internet.

Su código es abrir la url en el navegador del dispositivo si la redirección no funciona, definitivamente el problema no está en su código. Puede ser debido a 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 (nuevo Intent (Intent.ACTION_VIEW, uri), "Elegir navegador"));

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.