studio programacion por para navegador móviles integrado desarrollo defecto curso cual con aplicaciones android android-intent android-sdk-2.1

programacion - ¿Cómo puedo abrir el navegador de Android con los parámetros de POST especificados?



navegador con flash player para android (4)

En mi aplicación, necesito abrir un enlace en el navegador Android. Esta página puede recibir algunos datos solo a través de POST. ¿Podría agregar estos parámetros (datos) a la intención que inicia el navegador?

¿Sabes si esto es posible? Si es así, ¿podría darme una pista?


Creo que hay un pequeño error en la pregunta. Lo que falta es el propósito que necesita del POST en lugar de GET .

Si admites que haré algunas suposiciones que podrían ser comunes en este contexto:

  • Necesita ocultar las variables reales del historial
  • Necesita alguna interacción con el servidor antes de que el usuario obtenga el control
  • No puede controlar el servidor en sí y utiliza (a propósito) solicitudes POST

Cualquiera de esas opciones o requisitos implica algún procesamiento adicional que es distinto del uso habitual del navegador (que es para dar control total sobre el procesamiento y la interacción). Parece que en realidad está pidiendo comunicación de Máquina a Máquina (M2M) con eventual salida de HTML.

Si eso se convierte en verdadero, entonces usar OKHttp, HTTPURLConnection, Apache HTTP Client, etc. es la elección correcta. En lugar de invocar el navegador a través de Intent, tiene capacidades de mensajería cercanas a cero (solo dispara y olvida, en el caso de http: ...). En realidad, requiere algún análisis del flujo de datos (el diagrama de secuencia podría ayudar) y luego la ingeniería de ese proceso en M2M o la interacción M2M asistida.

Si el servidor con el que está utilizando para interactuar es suyo, entonces ¿por qué no crea REST / JSON / SOAP u otra API de M2M para realizar llamadas a métodos remotos (RPC / RMI / ...)? No es tan complejo como podría parecer (por ejemplo: http://coreymaynard.com/blog/creating-a-restful-api-with-php/ o https://docs.phalconphp.com/pt/latest/reference/tutorial-rest.html )

Una alternativa sería hacer que su interacción M2M sea más bien en su servidor de APP, porque entonces los cambios eventuales en el flujo de datos del servidor de BE podrían reflejarse sin cambio en la aplicación. Con esto, estarías cambiando la comunicación M2M parcialmente al lado del servidor.

Nota: Usar la aplicación para interactuar con servidores de terceros puede tener algunas implicaciones legales. De hecho, es posible que esos servidores no permitan otro uso que no sea el navegador (detección humana = captcha, detección de agente de usuario). En tal caso, debe negociar con el propietario del servidor.


Los intentos enviados al navegador pueden contener más que solo una URL. En versiones anteriores de Android, era posible empaquetar datos POST adicionales con la intención, en versiones más nuevas esa capacidad se ha ido, pero uno puede enviar datos de encabezado adicionales para un GET (que puede ser casi cualquier cosa representable como una cadena) en la intención entregada al navegador.


Use una vista web:

WebView webview = new WebView(this); setContentView(webview); byte[] post = EncodingUtils.getBytes("postvariable=value&nextvar=value2", "BASE64"); webview.postUrl("http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php", post);


try{ String finalUrl = "javascript:" + "var to = ''http://the_link_you_want_to_open'';" + "var p = {param1:''"+your_param+"'',param2:''"+your_param+"''};" + "var myForm = document.createElement(''form'');" + "myForm.method=''post'' ;" + "myForm.action = to;" + "for (var k in p) {" + "var myInput = document.createElement(''input'') ;" + "myInput.setAttribute(''type'', ''text'');" + "myInput.setAttribute(''name'', k) ;" + "myInput.setAttribute(''value'', p[k]);" + "myForm.appendChild(myInput) ;" + "}" + "document.body.appendChild(myForm) ;" + "myForm.submit() ;" + "document.body.removeChild(myForm) ;"; Uri uriUrl = Uri.parse(finalUrl); Intent browserIntent = new Intent(Intent.ACTION_VIEW); PackageManager packageManager = this.getPackageManager(); browserIntent.setData(uriUrl); List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0); for (ResolveInfo resolveInfo : list) { String activityName = resolveInfo.activityInfo.name; if (activityName.contains("BrowserActivity")) { browserIntent = packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName); ComponentName comp = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); browserIntent.setAction(Intent.ACTION_VIEW); browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); browserIntent.setComponent(comp); browserIntent.setData(uriUrl); } } this.startActivity(browserIntent); }catch (Exception e){ e.printStackTrace(); txtHeader.setText(e.toString()); }