ユーザーが Android デバイスにインストールしたアプリのリストを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4598769

質問

現時点では次のコードを使用しています。

List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

ただし、デバイスの製造元と私の両方によってインストールされたアプリが返されます。インストールしたアプリのみが返されるように制限するにはどうすればよいですか?

役に立ちましたか?

解決

// Flags: See below
int flags = PackageManager.GET_META_DATA | 
            PackageManager.GET_SHARED_LIBRARY_FILES |     
            PackageManager.GET_UNINSTALLED_PACKAGES;

PackageManager pm = getPackageManager();
List<ApplicationInfo> applications = pm.getInstalledApplications(flags);
for (ApplicationInfo appInfo : applications) {
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
        // System application
    } else {
        // Installed by user
    }
}

フラグ:

他のヒント

ゼリミールの答えは正しいです。しかし、場合によっては、インストールされているすべてのサードパーティアプリケーションが提供されません。 ApplicationInfo また、フラグがあります FLAG_UPDATED_SYSTEM_APP 設定されています

このアプリケーションがビルトインシステムアプリケーションの更新としてインストールされている場合

私のスマートフォンには、そのようなアプリケーションには、Amazone Kindle、Adobe Reader、Slacker Radioなどが含まれます。これらのアプリケーションは電話に付属せず、Google Playストアからインストールされました。したがって、それらはサードパーティアプリと見なすことができます。

したがって、確認することもできます FLAG_UPDATED_SYSTEM_APP 国旗。

final PackageManager packageManager = _context.getPackageManager();
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo appInfo : installedApplications)
{
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
    {
        // IS A SYSTEM APP
    }

    if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)
    {
        // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP
    }
}

pkgappslist.get(0)を実行すると、ResolveInfoオブジェクトが返されます。アイコンやパッケージネームなどの情報を取得するにはどうすればよいですか?

これを行うだけです:

ResolveInfo info = pkgAppsList.get(0);
ApplicationInfo appInfo = info.activityInfo.applicationInfo;

PackageManager packageManager = = getPackageManager();
//And then you retrieve all needed data:
Drawable packageIcon = packageManager.getApplicationIcon(applicationInfo); //Icon
String packageName = applicationInfo.packageName; //Package name
String packageLabel = String.valueOf(packageManager.getApplicationLabel(applicationInfo)) //Package label(app name)

ニコライの答えは正しいですが、イテレーターを使用して最適化できます。これは私が思いついたものです:

/**
 * Return list of installed user applications
 */
static List<ApplicationInfo> getUserInstalledApplications(Context context) {
    // Get installed applications
    final PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> installedApplications =
            packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

    // Remove system apps
    Iterator<ApplicationInfo> it = installedApplications.iterator();
    while (it.hasNext()) {
        ApplicationInfo appInfo = it.next();
        if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            it.remove();
        }
    }

    // Return installed applications
    return installedApplications;
}
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);

ユーザー

  1. pkgAppsList.get(i).activityInfo.packageName 取ってくる packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString()fetch app level name

Android PackageManager クラスは、現在デバイスにインストールされているアプリケーション パッケージに関する情報を取得するために使用されます。getPackageManager() を呼び出すことで、PackageManager クラスのインスタンスを取得できます。PackageManager は、インストールされたパッケージや関連する権限などをクエリおよび操作するためのメソッドを提供します。この Android の例では、Android にインストールされているアプリのリストを取得します。

パッケージマネージャー packageManager = getPackageManager();リスト list = packageManager.getInstalledApplications(PackageManager.GET_META_DATA)

packageManager.getInstalledApplications() は、デバイスにインストールされているすべてのアプリケーション パッケージのリストを返します。フラグ GET_UNINSTALLED_PACKAGES が設定されている場合、DONT_DELETE_DATA で削除されたアプリケーション (データ ディレクトリを持つ部分的にインストールされたアプリケーション) を含むすべてのアプリケーションのリストが返されます。

詳細情報 ここ。

もう一つ良いこと ここを読んでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top