无法确定 Android 设备上是不是安装了 Google Play 商店

     2023-04-15     10

关键词:

【中文标题】无法确定 Android 设备上是不是安装了 Google Play 商店【英文标题】:Cannot determine whether Google play store is installed or not on Android device无法确定 Android 设备上是否安装了 Google Play 商店 【发布时间】:2012-05-20 01:26:56 【问题描述】:

这是检查设备上已安装软件包的简单问题...在我将操作系统升级到 2.3.5 之前,我可以使用以下代码找到 Market/Play 商店:

private static final String GooglePlayStorePackageName = "com.google.market";

void someMethod() 
    packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) 
        if (packageInfo.packageName.equals(GooglePlayStorePackageName)) 
            googlePlayStoreInstalled = true;
            break;
        
    

更新后由于某种原因,我根本找不到表明应用程序已安装的to包名称,虽然它在设备上,我可以访问市场。

包名有变化吗?还是我看错了?

谢谢,

亚当。

更新:

这是一种检查是否安装了软件包的愚蠢方法……更好的方法是:

protected final boolean isPackageInstalled(String packageName) 
    try 
        application.getPackageManager().getPackageInfo(packageName, 0);
     catch (NameNotFoundException e) 
        return false;
    
    return true;

【问题讨论】:

以上代码运行良好...thanx 【参考方案1】:

请注意,这近 5 年的旧代码并非最佳代码,而且 Google 不喜欢您无缘无故检查所有已安装的软件包。请同时查看其他答案。

包名已更改,现在是 com.android.vending


试试:

private static final String GooglePlayStorePackageNameOld = "com.google.market";
private static final String GooglePlayStorePackageNameNew = "com.android.vending";

void someMethod() 
    PackageManager packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) 
        if (packageInfo.packageName.equals(GooglePlayStorePackageNameOld) ||
            packageInfo.packageName.equals(GooglePlayStorePackageNameNew)) 
            googlePlayStoreInstalled = true;
            break;
        
    

【讨论】:

这意味着我现在必须检查两个应用程序是否存在......嗯......不太好! 但是你为什么在getInstalledPackages() 中使用标志PackageManager.GET_UNINSTALLED_PACKAGES 而不仅仅是getInstalledPackages(0) 顺便说一下,不是"com.google.vending",而是"com.android.vending"。不知道旧名字。 谢谢,一条评论:packageManager 的声明必须是:PackageManager packageManager 并且也想说和 Prizoff 一样。 @Prizoff:您可以禁用 Google Play 商店应用。因此,虽然它不计入已安装的应用程序,但当我们通过标志 GET_UNINSTALLED_PACKAGES 时,它将被拾取。【参考方案2】:

GooglePlayServices 有一个实用程序类,其中包含处理此问题的方法:

isGooglePlayServicesAvailable(Context).

它为设备上播放服务的状态提供适当的错误对话框。

API 参考:

GoogleApiAvailability.isGooglePlayServicesAvailable(android.content.Context)

【讨论】:

这是最近的...我将在接下来的几天内对其进行测试...到目前为止,代码看起来像是一团糟! 确实如此!但好吧,这就是谷歌习惯做的事情:) 请注意,开发者不应混淆 Google Play 商店应用和 Google Play 服务。 GooglePlayServicesUtil.isGooglePlayServicesAvailable() 检查后者,这可能是一个指标,但不是要求。但是,该类具有两个包名称的常量。恕我直言,如果您想检查现有的 Google Play 商店应用程序(例如,因为您想启动 market:// 意图,请将 PackageManager 与 GOOGLE_PLAY_STORE_PACKAGE 一起使用。 绝对。你想编辑我的评论,让它包含这个吗?【参考方案3】:

正如 Michael 在 cmets 中所述,Google Play 服务与 Google Play 商店不同。使用它来确定您的设备上是否安装了 Play 商店:

public static boolean isPlayStoreInstalled(Context context)
    try 
        context.getPackageManager()
                .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
        return true;
     catch (PackageManager.NameNotFoundException e) 
        return false;
    

【讨论】:

请注意,这需要您将com.google.android.gms:play-services-base:$playServicesVersion 添加到您的依赖项中。 (它不会对正在安装的 Play 服务产生运行时依赖。) @Thomas,没必要。您可以将 GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE 替换为“com.android.vending”【参考方案4】:

在大多数情况下,我们想知道是否安装了 Google Play 商店,以便在预加载某些应用页面的情况下启动它。

为什么我们不能这样做:

final String appPackageName = getPackageName(); // get your app package name
try 
    Uri uri = Uri.parse("market://details?id=" + appPackageName);
    startActivity(new Intent(Intent.ACTION_VIEW, uri));
 catch (android.content.ActivityNotFoundException anfe) 
    // Google Play Store is not available.

【讨论】:

【参考方案5】:

使用此代码,您可以检查您的设备上是否安装了 Google Play 服务

int val=GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this);
            if(val==ConnectionResult.SUCCESS)
            
                play_installed=true;
            
            else
            
                play_installed=false;
            

【讨论】:

Google Play 服务!= Google Play 商店。您可以安装商店但不安装 GPS,反之亦然。 OP 要求商店。 isGooglePlayServicesAvailable 已弃用。请改用GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)【参考方案6】:

检查是否已安装并激活 Google Play 商店:

科特林

companion object 
    private const val GOOGLE_PLAY_STORE_PACKAGE = "com.android.vending"


private fun isPlayStoreInstalled(context: Context): Boolean 
    return try 
        val packageInfo = context.packageManager.getPackageInfo(GOOGLE_PLAY_STORE_PACKAGE, 0)
        packageInfo.applicationInfo.enabled
     catch (exc: PackageManager.NameNotFoundException) 
        false
    

Java

   private static final String GOOGLE_PLAY_STORE_PACKAGE = "com.android.vending";

   private final boolean isPlayStoreInstalled(Context context) 
      boolean flag;
      try 
         PackageInfo packageInfo = context.getPackageManager().getPackageInfo(GOOGLE_PLAY_STORE_PACKAGE, 0);
         flag = packageInfo.applicationInfo.enabled;
       catch (PackageManager.NameNotFoundException exc) 
         flag = false;
      
      return flag;
   

【讨论】:

Google Maps Android API V2 检查设备上是不是安装了 GoogleMaps

】GoogleMapsAndroidAPIV2检查设备上是不是安装了GoogleMaps【英文标题】:GoogleMapsAndroidAPIV2checkifGoogleMapsareinstalledondeviceGoogleMapsAndroidAPIV2检查设备上是否安装了GoogleMaps【发布时间】:2012-11-2613:38:49【问题描述】:在使用GoogleMapsAndroidAPIV... 查看详情

Android 应用无法在某些设备上运行

】Android应用无法在某些设备上运行【英文标题】:Androidappwon\'tworkinsomeofthedevices【发布时间】:2017-05-1008:15:29【问题描述】:我创建了一个显示Firebase子级的应用。它可以在我的手机(nexus6)中运行,也可以在另一个(一加3)中... 查看详情

Android TV 应用无法安装在 Android TV 设备上

】AndroidTV应用无法安装在AndroidTV设备上【英文标题】:AndroidTVappcan\'tbeinstalledonAndroidTVdevices【发布时间】:2021-06-1005:34:33【问题描述】:我已经在GooglePlayStore上发布了应用。在我尝试过的任何运行AndroidTV的设备上的GooglePlay商店应... 查看详情

如何检查设备上是不是安装了任何应用程序? [关闭]

】如何检查设备上是不是安装了任何应用程序?[关闭]【英文标题】:Howtocheckifanyappisinstalledonthedeviceornot?[closed]如何检查设备上是否安装了任何应用程序?[关闭]【发布时间】:2014-10-0812:16:57【问题描述】:我想在php的帮助下检... 查看详情

使用移动网页检测设备上是不是已安装 Android 应用 - PHP 和 JS

】使用移动网页检测设备上是不是已安装Android应用-PHP和JS【英文标题】:DetectifAndroidapphasbeeninstalledonthedeviceusingamobilewebpage-PHPandJS使用移动网页检测设备上是否已安装Android应用-PHP和JS【发布时间】:2012-10-0303:12:30【问题描述】:... 查看详情

如何确定我的应用程序是不是在 Android 上运行 [重复]

】如何确定我的应用程序是不是在Android上运行[重复]【英文标题】:HowtodetermineifmyappisrunningonAndroid[duplicate]如何确定我的应用程序是否在Android上运行[重复]【发布时间】:2011-05-3000:09:03【问题描述】:我有一个应用程序可以在多... 查看详情

DetoxRuntimeError:无法在设备上运行应用程序 -Android

】DetoxRuntimeError:无法在设备上运行应用程序-Android【英文标题】:DetoxRuntimeError:Failedtorunapplicationonthedevice-Android【发布时间】:2020-07-1721:32:15【问题描述】:在Pixel_3_API_29Android10.0x86上运行我已经用其他react-native代码测试了这个... 查看详情

无法在设备“emulator-5554”上安装 *.apk:EOF

...10【问题描述】:我尝试运行的项目设置为minSDK7级。运行Android虚拟设备5554时出现上述错误消息(其他设备运行良好)。它工作得如此缓慢,并且花费了太多时间才能使主屏幕甚至无法运行。最后,它给出了这个错误 查看详情

如何检测设备上是不是安装了 AppSync?

】如何检测设备上是不是安装了AppSync?【英文标题】:HowtodetectwhetherAppSyncisinstalledondevice?如何检测设备上是否安装了AppSync?【发布时间】:2012-10-2521:48:58【问题描述】:AppSync会导致iCloud和应用内购买出现一些问题,因此我想检... 查看详情

在设备上安装 Android App Bundle

】在设备上安装AndroidAppBundle【英文标题】:InstallAndroidAppBundleondevice【发布时间】:2018-10-2908:46:06【问题描述】:我使用新的AndroidAppBundle格式构建了我的项目。有了APK文件,我可以将APK下载到我的设备上,打开它,然后立即安装... 查看详情

如何在 iOS 上检查用户设备上是不是安装了特定应用程序? [复制]

】如何在iOS上检查用户设备上是不是安装了特定应用程序?[复制]【英文标题】:HowdoIcheckifaparticularappisinstalledontheuser\'sdeviceoniOS?[duplicate]如何在iOS上检查用户设备上是否安装了特定应用程序?[复制]【发布时间】:2019-05-2705:16:02... 查看详情

确定是不是从 Unity 安装 Facebook 应用

】确定是不是从Unity安装Facebook应用【英文标题】:DeterminingifFacebookappisinstalledfromUnity确定是否从Unity安装Facebook应用【发布时间】:2015-03-0619:22:06【问题描述】:我们正在使用FacebookSDKforUnity(v6.0),我现在想知道是否有方法可以检... 查看详情

升级到 android 3.6.1 apk 后无法在设备上安装

】升级到android3.6.1apk后无法在设备上安装【英文标题】:Afterupgradingtoandroid3.6.1apkcantbeinstalledondevices【发布时间】:2020-06-1808:25:40【问题描述】:我有一个用于测试的apk(在发布版本之前共享给不同的设备)并使用androidstudio3.5.0... 查看详情

Android 无法在设备上安装 HelloWorld.apk (null) 错误

】Android无法在设备上安装HelloWorld.apk(null)错误【英文标题】:AndroidFailedtoinstallHelloWorld.apkondevice(null)Error【发布时间】:2011-07-1022:28:48【问题描述】:我是Android新手。当我在Eclipse中运行我的android应用程序时,我在控制台中收到... 查看详情

Android Unsigned App 无法安装在设备上

】AndroidUnsignedApp无法安装在设备上【英文标题】:AndroidUnsignedAppnotabletoinstallondevice【发布时间】:2012-02-2219:52:03【问题描述】:我的应用能够在模拟器上运行,我将其导出为未签名应用。在我手机的设置-->>应用程序-->>... 查看详情

无法在设备“emulator-5554”上安装 apk:超时

...':timeout【发布时间】:2011-05-3122:43:46【问题描述】:我是Android开发新手。我尝试在此文件夹中运行LunarLander项目(基于示例创建新项目)C:\\ProgramFiles\\Android\\android-sdk-windows\\sam 查看详情

有没有办法确定非 Android 蓝牙设备是不是连接到我的 Android 设备?

】有没有办法确定非Android蓝牙设备是不是连接到我的Android设备?【英文标题】:Isthereawaytofindoutifanon-AndroidBluetoothdeviceisconnectedtomyAndroiddevice?有没有办法确定非Android蓝牙设备是否连接到我的Android设备?【发布时间】:2011-12-0415:5... 查看详情

使用 Chromecast SDK 确定是不是在接收器上为 android 启用了隐藏式字幕

】使用ChromecastSDK确定是不是在接收器上为android启用了隐藏式字幕【英文标题】:UsingChromecastSDKtodetermineifclosedcaptionsareenabledonthereceiverforandroid使用ChromecastSDK确定是否在接收器上为android启用了隐藏式字幕【发布时间】:2019-10-3014:3... 查看详情