Comment incluez-vous les mots-clés dans les URL pour Adb Shell?

En utilisant

$ adb shell am start some://url 

Je peux lancer des URL utilisant le gestionnaire d'activité. Toutefois, si j'inclus de multiples paramètres d'URL, tout le paramètre sauf le premier est éliminé.

  • Calculez la distance de 100 mètres lorsque la latitude et la longitude sont un point connu
  • Cycle de vie de l'activité Android - à quoi servent toutes ces méthodes?
  • Les éléments de forme Android ont des tailles différentes sur différents émulateurs
  • Android Studio 0.4 Dupliquer les fichiers copiés dans APK META-INF / LICENSE.txt
  • Comment lire InputStream d'un fichier audio qui ne se trouve pas dans une url ou un stockage?
  • Flash dans WebView ne fonctionne pas sur Android 3.2
  • Exemple:

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

    Résultats:

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

    Et param2 disparaît comme quelque chose après que l'une et l'autre ne soient ignorées. Je me demandais s'il y a un caractère d'encodage / échappement pour le & qui l'empêchera.

    4 Solutions collect form web for “Comment incluez-vous les mots-clés dans les URL pour Adb Shell?”

    Utiliser le caractère d'échappement \ :

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

    La solution acceptée ne fonctionne pas en raison d'un bug dans les outils de compilation Android que vous pouvez suivre ici: https://code.google.com/p/android/issues/detail?id=76026 . Une solution de contournement est la suivante:

     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 

    Pour l'intégrer à gradle, vous pouvez utiliser l'instruction commandLine

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

    Citer la commande am... !
    Quelque chose comme le suivant devrait fonctionner (si ce n'est pas le cas, essayez double-devis):

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

    J'ai déjà posé une solution de contournement ici: https://code.google.com/p/android/issues/detail?id=76026

    Donc, voici la recette qui implique l'instrumentation.
    Enregistrez un BroadcastReceiver dans l'instrumentation qui écoute l'action 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); 

    Remplacez l'importation avec% 26 (l'utilisation peut la remplacer par tout ce que vous voulez) et envoyez une intention com.example.action.VIEW.
    Une fois l'intention reçue, BroadcastReceiver convertit% 26 en signatures et envoie une nouvelle intention avec l'action souhaitée à votre application.

     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); } 

    Fondamentalement, il agit comme un proxy BroadcastReceiver.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.