2012-05-30 4 views

答えて

44

PackageManagerクラスは、指定したパッケージをインストールしたパッケージ名を示すgetInstallerPackageNameメソッドを提供します。サイドロードされたアプリには値は含まれません。

EDIT:Amazon App Storeに関するご注意@mttmllns 'answer below

+4

それは非常によく動作します。 – ttom

+0

@AbhishekBあなたはAndroidのどのバージョンを使用していますか?あなたはエミュレータにいますか? – MattC

+3

@AbhishekB私はサイドロードされたアプリの起源を見つける方法を知らない。私はそれが技術的にはどこからでもデバイスにロードされ、その後おそらくPackageManager経由でインストールされたAPKファイルなので、それがどのように追跡されるかわかりません。 – MattC

22

そしてFYI apparentlyアマゾンストアの最新バージョンは、最終的にPackageManager.getInstallerPackageName()から"com.amazon.venezia"に設定され、Google Playの"com.android.vending"と対照的です。

+0

PackageManagerの型から静的でないメソッドgetInstallerPackageName(String)への静的参照を作成できません –

+0

すべてのappstoreにはPlayストアに独自のmarketappがあり、順番にapk(パッケージ)がインストールされます。 packagemanager getInstaller ...()は、指定されたapkをインストールしたmarketappのパッケージ名を返します。例えば。 com.amazon.veneziaはamazon marketappのパッケージ名です。 PlayStoreは信頼できるmarketappsを制御できるので、かなり巧妙です。これは最終的にすべての信頼できないサイドロードを防ぐように設計されています。新しいアンドロイドOSバージョンの摂取が劇的に減少していることに気づく。 KitKatはデファクトスタンダードとなるかもしれません。 –

15

ビルドがストアからダウンロードやサイドロードされた場合、私は、チェックするためにこのコードを使用します。

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; 
} 
関連する問題