Мне нужно определить, что мое приложение установлено из игры Google или другого рынка, как я могу получить эту информацию?Как узнать, что приложение установлено из игры Google или боковой загрузки?
ответ
Класс PackageManager
предоставляет метод getInstallerPackageName, который укажет вам имя пакета, установленного для указанного вами пакета. Боковые приложения не будут содержать значения.
EDIT: Примечание @mttmllns 'answer below относительно магазина приложений Amazon.
И FYI apparently последняя версия магазина Amazon, наконец, устанавливает PackageManager.getInstallerPackageName()
к "com.amazon.venezia"
, а контрастировать с Google Play! "com.android.vending"
.
Невозможно сделать статическую ссылку на нестатический метод getInstallerPackageName (String) из типа PackageManager –
В каждом магазине appstore есть свой собственный marketapp на Playstore, который, в свою очередь, устанавливает свои apks (пакеты). Packagemanager getInstaller ...() возвращает имя пакета marketapp, в котором установлен данный apk. Например. com.amazon.venezia - это название пакета amazon marketapp. Довольно умный, потому что тогда PlayStore может контролировать, какие рыночные клиенты доверяют. Это предназначено для предотвращения всех ненадежных боковых нагрузок. Заметив, что поглощение новых версий ОС Android резко падает. KitKat может стать стандартом defacto. –
Я использую этот код, чтобы проверить, если сборка была загружена из магазина или загружена на:
public static boolean isStoreVersion(Context context) {
boolean result = false;
try {
String installer = context.getPackageManager()
.getInstallerPackageName(context.getPackageName());
result = !TextUtils.isEmpty(installer);
} catch (Throwable e) {
}
return result;
}
Он работает очень хорошо. – ttom
@AbhishekB, в какую версию Android вы включили? Вы в эмуляторе? – MattC
@AbhishekB Я не знаю, как найти оригинальные загруженные приложения. Я не уверен, как это можно было бы отслеживать, поскольку технически это всего лишь файл APK, который загружается на устройство где-то, а затем предположительно устанавливается через PackageManager. – MattC