2012-11-28 9 views
22

. Ancak, birden çok URL parametresi eklerseniz, tüm ancak ilk parametre çıkarılır.

Örnek:

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

İade: Bir ve işareti yok sayılır sonra

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

ve param2 şey olarak kaybolur. Bunu önlemek için & için bazı kodlama/çıkış karakteri varsa merak ediyorum.

cevap

29

kullanım kaçış karakteri \:

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

sen kaçıyorsun Bu sorunu https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=76026 – bumbobway

+3

bakın Çözüm göndermek için: $ adb kabuk başlatıyorum "http://www.example.com?param1=1%26param2=2" ' –

1

Zaten burada bir çözüm attılar: https://code.google.com/p/android/issues/detail?id=76026

Yani, burada enstrümantasyon içeren tarifi.
Yayın com.example.action.VIEW dinleyen enstrümantasyonda bir BroadcastReceiver kaydedin.

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

(istediğiniz herhangi bir şey ile değiştirebilirsiniz kullanım)% 26 ile işareti yerine ve bir niyet com.example.action.VIEW gönderin.
BroadcastReceiver'ın amacı bir kez alındığında,% 26'yı dönüşümlü olarak geri dönüştürür ve uygulamanıza istediğiniz eylemle yeni bir niyet gönderir.

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

Temel olarak BroadcastReceiver proxy işlevi görür.

4

kabul çözüm çünkü burada izleyebilirsiniz android Yapım araçları bir hata çalışmaz: https://code.google.com/p/android/issues/detail?id=76026. Bir geçici çözüm aşağıdaki gibidir:

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 

Eğer CommandLine deyimi

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

Bunun için teşekkürler! Şu anda INSTALL_REFERRER yayınını test etmenin doğru yolu budur. – scana

2

Alıntı am... komut kullanabilirsiniz gradle bunu entegre etmek! (Bu çift tırnak deneyin yoksa) aşağıdaki çalışması gerekir gibi
şey: Platform araçları sürüm 21 URL ilk işareti sonra kesildi alacak bir hata olsa bile, orada ile maalesef

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