Trong khi ở hầu hết các trường hợp, bạn có thể lấy tên cửa hàng bằng cách bao gồm một tấm séc tương tự như sau:
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" là Google Play Store và
'com.amazon.venezia' là Amazon Appstore, và
null khi nó được tải hai chiều
Các kết quả có thể không đáng tin cậy tuy nhiên, như ví dụ trong phiên bản beta thử nghiệm một cửa hàng có thể không đặt giá trị này, và ngoài ra nó có thể sideload ứng dụng của bạn chỉ rõ tên gói của trình cài đặt có thể được hiểu như là một tên cửa hàng:
adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>
bạn có thể muốn xem xét việc có tên gói khác nhau cho các cửa hàng khác nhau, ví dụ "com.example.yourapp" cho Google và "com.example.yourapp.amazon" cho Amazon - bạn có thể dễ dàng ily đặt những người trong kịch bản Gradle của bạn.
tại sao không chỉ có một biến trong mỗi bản phát hành cho biết nơi nó được tải lên? Hoặc có một OptionPane là người dùng ... –
'PackageManager' và' getInstallerPackageName() 'sẽ cho bạn biết trình cài đặt là gì. Bạn sẽ phải chạy thử nghiệm để xem thử nghiệm nào trả về trong các trường hợp khác nhau của bạn. – CommonsWare
@Fran nếu bạn đã thử nghiệm những gì bạn đã đưa ra? – ahsteele