6

インストールされているアプリの名前がGooglePlayであるかMarketであるかにかかわらず、パッケージ名は同じcom.android.vendingです。

アプリがGooglePlayであるかMarketであるかを検出できる必要があります。私は、PackageInfoをチェックインしましたが、それ以外は何もありませversionCodeversionName

誰かが最初versionCodeversionNameGooglePlayアプリのためだったのか、それが何だったのか知っていますか?

誰かがこれを検出する他の方法を知っているなら、私に知らせてください。

4

5 に答える 5

5

アプリケーションのラベルを確認する方法を見つけました。デバッガーを使用して、何が返されるpackageInfoかを確認していました。そのため、最初は表示されませんでした。

public static boolean isGooglePlayInstalled(Context context) {
    PackageManager pm = context.getPackageManager();
    boolean app_installed = false;
    try
    {
           PackageInfo info = pm.getPackageInfo("com.android.vending", PackageManager.GET_ACTIVITIES);
           String label = (String) info.applicationInfo.loadLabel(pm);
           app_installed = (label != null && !label.equals("Market"));
    }
    catch (PackageManager.NameNotFoundException e)
    {
           app_installed = false;
    }
    return app_installed;
}
于 2013-03-14T06:14:55.207 に答える
2

この非常に単純化されたソリューションを試すこともできます。

public boolean isGooglePlayAvailable() {
        boolean googlePlayStoreInstalled;
        int val= GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationActivity.this);
        googlePlayStoreInstalled = val == ConnectionResult.SUCCESS;
        return googlePlayStoreInstalled;
    }
于 2013-11-13T13:43:20.367 に答える
2

私のアプリでは、次のように起動する前にPlayストアを開く可能性を確認します。

    public static boolean isResolveActivity(Intent intent) {
            return App.getInstance().getPackageManager().resolveActivity(intent, PackageManager.GET_RESOLVED_FILTER) != null;
        }

   public void isResolveActivity(String appPackage) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackage));

      if(isResolveActivity(intent)){
      ...open intent
      }
  }
于 2018-12-31T13:01:21.653 に答える
1

この単純なコードを使用することができます。簡単で、以下を使用して車輪の再発明を行わないことを考慮して、要点を説明しGooglePlayServicesUtilます。

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

これには、これを依存関係に追加する必要があります。

compile 'com.google.android.gms:play-services-base:[PLAY_SERVICES_VERSION]'

最新play-servicesバージョンは次のとおりです。10.0.1

于 2017-02-01T09:05:11.587 に答える
0

これは、ユーザーがそれについて何かを行うことができるステータス、つまり再認証または更新を可能にするため、おそらくより良い例です。GCMクライアントサンプルプロジェクトのコードに基づく:

 public static boolean checkPlayServices(Activity activity) {
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                GooglePlayServicesUtil.getErrorDialog(resultCode, activity,
                        PLAY_SERVICES_RESOLUTION_REQUEST).show();
            } else {
                Toast.makeText(activity.getApplicationContext(), "This device is not supported.", Toast.LENGTH_LONG).show();
                activity.finish();
            }
            return false;
        }
        return true;
    }
于 2014-07-21T13:56:52.730 に答える