2012-06-17 9 views
10

Bir uygulamanın Amazon App Store veya Google Play Store'dan indirilip indirilmediğini öğrenmenin bir yolu var mı? Tabii ki, uygulamanın kendisinde kastettim.Bir uygulamanın Google Play'den veya Amazon'dan indirilip kaydedilmediğini nasıl öğrenebilirim?

Bir uygulamayı her iki siteye de dağıttım ve müşterinin uygulamayı yüklediğini bilmek istiyorum. Biliyorum, her bir hizmete farklı uygulamalar dağıtabilirim, ancak bu, aynı paketin kullanıldığı bir uygulama içinde bir koşulla çözülmesi gereken bir yol varsa, önlenebilecek bazı bakım çalışmaları ekler. Code

+3

niçin yüklenen her bir dosyada nereye yüklendiğini gösteren bir değişken değil? Veya kullanıcı olarak bir OptionPane var ... –

+9

'PackageManager' ve' getInstallerPackageName() 'yükleyicinin ne olduğunu size söyleyecektir. Farklı senaryolarınızda ne getirdiğini görmek için denemeler yapmak zorunda kalacaksınız. – CommonsWare

+0

@Fran Eğer deneme yaptıysanız, ne ile geldiniz? – ahsteele

cevap

12

:

final PackageManager packageManager = getPackageManager(); 

try { 
    final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0); 
    if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) { 
     // App was installed by Play Store 
    } 
} catch (final NameNotFoundException e) { 
    e.printStackTrace(); 
} 

"com.android.vending" söyler o Google Play Store'dan geldi. Amazon Appstore'un ne olduğundan emin değilim, ancak yukarıdaki kodu kullanarak test etmek kolay olmalı.

Via ADB:

adb shell pm dump "PACKAGE_NAME" | grep "vending" 

Örnek:

adb shell pm dump "com.android.chrome" | grep "vending" 

installerPackageName=com.android.vending 
+0

Bu, Android Studio hata ayıklayıcıya eklendiğinde ve hem Google Nexus 7 hem de Kindle Fire HD'ye doğrudan bağlandığında "installerPackageName" öğesinin "null" değerini verir. Hata ayıklayıcısına bağlandığında bu bekleniyor mu? Ve bir release.apk olduğunda okunaklı dizeleri dönecek? –

+1

Evet ve hayır. Uygulama bir uygulama mağazasıyla yüklenmediğinde veya yükleme uygulaması deposu alanı ayarlamadığında "null" bekleniyor. Android Studio tarafından kullanılan yükleyici alanı ayarlamıyor, bu yüzden boş. ("Çalıştır" sekmesinde görüldüğü gibi "DEVICE SHELL COMMAND: pm install -r" /data/local/tmp/com.mypackage.myapp "') Her durumda, Android Studio neredeyse kesinlikle değeri ayarlamaz com.android'e.Vending ', ancak com.android.studio' ya da bir şey daha olasıdır. – nmr

1

çoğu durumda buna benzer bir çek dahil ederek mağaza adını almak mümkün olmakla birlikte:

final PackageManager packageManager = getPackageManager(); 

try { 
    final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0); 
    if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) { 
     // App was installed by Play Store 
    } else if ("com.amazon.venezia".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) { 
     // App was installed by Amazon Appstore 
    } else { 
     // App was installed from somewhere else 
    } 
} catch (final NameNotFoundException e) { 
    e.printStackTrace(); 
} 

"com.andr oid.vending" Google Store'u ve Play
'com.amazon.venezia' Amazon Appstore olduğunu ve beta sırasında örneğin,

sonuç ancak güvenilmez olabilir yükledikleri edildi
boş bir mağaza test Bu değeri ayarlayın ve yanında bir mağaza adı olarak yorumlanabilecek yükleyici paket adını belirterek uygulamanızı sideload mümkündür olmayabilir:

adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK> 
Örneğin, farklı mağazalar için farklı paket isimleri olan düşünebilirsiniz

Google için "com.example.yourapp" ve Amazon için "com.example.yourapp.amazon" - kolayca yapabilirsiniz bunları Gradle komut dosyasında ayarlayın.

İlgili konular