Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo se incluyen los "ampersand" en las URL de adb shell am start?

Utilizando

$ adb shell am start some://url 

Puedo lanzar URL usando el gestor de actividades. Sin embargo, si incluyo varios parámetros de URL, todos excepto el primer parámetro se eliminan.

Ejemplo:

 $ adb shell am start http://www.example.com?param1=1&param2=2 

Devoluciones:

 $ Starting: Intent { act=android.intent.action.VIEW dat=http://www.example.com?param1=1 } 

Y param2 desaparece como cualquier cosa después de que un esperma sea ignorado. Me pregunto si hay algún carácter de codificación / escape para el & que evitará esto.

  • Cómo ir sobre varios botones y OnClickListeners
  • Android: R.drawable no mostrar mi imagen?
  • ¿Por qué la firma no es válida en la API de Google Maps para Android?
  • Cómo hacer el diseño relativo con la sombra de la caja
  • ¿Podemos tener INSTALL_REFERRER dos veces en una sola aplicación de Android?
  • Cómo abrir un proyecto existente en Eclipse
  • Signin de Google Firebase dando estado 12501 (no funciona), en la versión de creación de la versión y jks SHA
  • ¿Cambiar la pestaña de desplazamiento / desplazamiento en combinación con ScrollView?
  • 4 Solutions collect form web for “¿Cómo se incluyen los "ampersand" en las URL de adb shell am start?”

    Use el carácter de escape \ :

     $ adb shell am start "http://www.example.com?param1=1\&param2=2" 

    La solución aceptada no funciona debido a un error en las herramientas de compilación android que puede realizar un seguimiento aquí: https://code.google.com/p/android/issues/detail?id=76026 . Una solución es la siguiente:

     echo 'am broadcast -a com.android.vending.INSTALL_REFERRER -n <your package>/<broadcast-receiver> --es "referrer" "utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name";exit'|adb shell 

    Para integrarlo en gradle puede utilizar la instrucción commandLine

     commandLine "bash","-c","echo ..." 

    Citar el comando am... !
    Algo como lo siguiente debería funcionar (si no lo hace, intente una comilla doble):

     adb shell 'am start http://www.example.com?param1=1&param2=2' 

    Ya he publicado una solución provisional aquí: https://code.google.com/p/android/issues/detail?id=76026

    Así que, aquí está la receta que implica la instrumentación.
    Registre un BroadcastReceiver dentro de la instrumentación que escucha la acción com.example.action.VIEW.

     IntentFilter intentFilter = new IntentFilter("com.example.action.VIEW"); intentFilter.addDataScheme("myschema"); intentFilter.addCategory(Intent.CATEGORY_BROWSABLE); Context.registerReceiver(new MyBroadcastReceiver(), intentFilter); 

    Sustituya el & comercial con% 26 (el uso puede substituirlo con cualquier cosa que usted quiere) y envía un com.example.action.VIEW intento.
    Una vez recibida la intención BroadcastReceiver convierte% 26 de nuevo a esperma y envía una nueva intención con la acción deseada a su aplicación.

     public final void onReceive(final Context context, final Intent intent) { intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(intent.getDataString().replaceAll("%26", "&"))); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } 

    Básicamente actúa como un proxy BroadcastReceiver.

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