2010-11-02 18 views
6

duplicados posible:
How can I open android browser with specified POST parameters?lanzamiento del navegador por defecto con parámetros intención y colocar

me gustaría hacer algo así:

startActivity (nueva Intención (Intención. ACTION_VIEW, Uri.parse ("http://www.somepage.com?par1=val1&par2=val2"));

Pero no quiero enviar los parámetros con get pero con post. ¿Cómo puedo hacer esto como se describe arriba?

Muchas gracias de antemano, Navajo

+0

¿Alguna vez este trabajo? Estoy intentando hacer lo mismo. – jax

Respuesta

1

Navajo,

Lo que estamos tratando de hacer, no se puede hacer con la URL anterior con las limitaciones que se han hecho anteriormente. La razón principal de esto es que la URL de arriba es una URL GET. Una URL POST no tiene los parámetros anteriores. Se pasan en la SOLICITUD real y no en la URL.

Para lograr lo que desea hacer, debe interceptar la intención, volver a formatear la URL y luego iniciar el navegador con una nueva intención. La fuente de la URL es la clave. Si la fuente proviene de usted o de algo que puede rastrear, eso es fácil, simplemente cree una intención personalizada. Si la fuente está fuera de su control, entonces puede tener problemas (vea abajo) ...

1) Los GET y POST no son intercambiables. Si está jugando con datos que no son suyos o que no van a un sitio que usted controla, entonces puede romper la funcionalidad de ese sitio, porque no todos programan tanto para GET como para POST por razones de seguridad.

2) Si está respondiendo a la misma intención que tiene el navegador, entonces es posible que el usuario no entienda lo que hace su aplicación si siempre abre el valor predeterminado.

Otra posibilidad (si tiene el control del sitio web) es responder al Intento creando una cookie que su sitio pueda leer con los requisitos de datos reales. Esto requeriría PHP/ASP en el servidor o JS activado HttpRequest().

Si tuviera más información, podría aconsejarte mejor.

FuzzicalLogic

11

Se puede hacer, pero de una manera difícil.

Puede crear un pequeño archivo html con un formulario de envío automático, leerlo en una cadena, reemplazar params e incrustarlo en el intento como un uri de datos en lugar de una url. Hay un par de cosas negativas, solo funciona llamar directamente al navegador predeterminado, y el truco se guardará en el historial del navegador, aparecerá si navegas hacia atrás.

Aquí se muestra un ejemplo:

archivo HTML (/ res/primas): Código

<html> 
    <body onLoad="document.getElementById('form').submit()"> 
     <form id="form" target="_self" method="POST" action="${url}"> 
      <input type="hidden" name="param1" value="${value}" /> 
      ... 
     </form> 
    </body> 
</html> 

Fuente:

private void browserPOST() { 
    Intent i = new Intent(); 
    // MUST instantiate android browser, otherwise it won't work (it won't find an activity to satisfy intent) 
    i.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 
    i.setAction(Intent.ACTION_VIEW); 
    String html = readTrimRawTextFile(this, R.raw.htmlfile); 

    // Replace params (if any replacement needed) 

    // May work without url encoding, but I think is advisable 
    // URLEncoder.encode replace space with "+", must replace again with %20 
    String dataUri = "data:text/html," + URLEncoder.encode(html).replaceAll("\\+","%20"); 
    i.setData(Uri.parse(dataUri)); 
    startActivity(i); 
} 

private static String readTrimRawTextFile(Context ctx, int resId) { 
    InputStream inputStream = ctx.getResources().openRawResource(resId); 

    InputStreamReader inputreader = new InputStreamReader(inputStream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 
    String line; 
    StringBuilder text = new StringBuilder(); 
    try { 
     while ((line = buffreader.readLine()) != null) { 
      text.append(line.trim()); 
     } 
    } 
    catch (IOException e) { 
     return null; 
    } 
    return text.toString(); 
} 
+0

Lo anterior también funciona para mí. Pero, ¿se puede hacer esto con _Chrome Custom Tabs_ de una manera similar también? Me temo que esto sería un truco que podría arreglarse más temprano que tarde. – xanderiel

Cuestiones relacionadas