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.

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.