4

PackageManager から ApplicationInfo オブジェクトを取得する方法はありますか? これを達成するためにさまざまな種類の方法を試しましたが、役に立ちませんでした。私は現在、デフォルトのAndroidランチャー画面(Application Drawer)に取り組んでおり、パッケージ名から具体的にパッケージ情報を取得したいと考えています。これはアプリケーション層ではなく、ソースである Launcher2 アプリケーションのビルド層にあります。私が使用しているアンドロイドのバージョンは 2.3.3 です。

これが私が試したことです:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);

エラー:

Type mismatch: cannot convert from android.content.pm.ApplicationInfo to com.android.launcher2.ApplicationInfo

これは、実行中の現在のパッケージを取得するためではなく、電話機自体のすべてのアプリケーションを取得するためのものです。

見つけた:

pack.getApplicationInfo(packageName, flags)

AllApps2D.java で以下の関数に渡された ApplicationInfo と同じ ApplicationInfo オブジェクトを返しません。

public void addApps(ArrayList<ApplicationInfo> list)

名前だけでパッケージ自体から ApplicationInfo オブジェクトを取得しようとしています。

AllApps2D.java (Launcher2 フォルダー) のオープン ソース コードにあるように、問題の関数は以下のとおりです。

 private ArrayList<ApplicationInfo> mAllAppsList = new ArrayList<ApplicationInfo>();

 public void addApps(ArrayList<ApplicationInfo> list) {
        final int N = list.size();

        for (int i=0; i<N; i++) {
            final ApplicationInfo item = list.get(i);
            int index = Collections.binarySearch(mAllAppsList, item,
                    LauncherModel.APP_NAME_COMPARATOR);
            if (index < 0) {
                index = -(index+1);
            }
            mAllAppsList.add(index, item);
        }
        mAppsAdapter.notifyDataSetChanged();
    }

アップデート

基本的に私がやろうとしているのは、ランチャーのアイコンの配置をカスタムオーダーで並べ替えることです。これに必要な情報を PackageManager 経由で取得できれば理想的です。

私が実装したものが機能するためには、AllApps2D コードが使用しているのと同じ ApplicationInfo オブジェクトをプルできる必要があります

com.android.Launcher2.ApplicationInfo

これは、以下によって返されるものと同じではありません:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);

つまり:

android.content.pm.ApplicationInfo

ランチャーで使用できるコードと、私が使用しているクラスはこちらにあります。

これらの手法はいずれも、android ビルド内の launcher2 アプリケーション内では機能ません。他の提案はありますか?

4

2 に答える 2

7

すべてのアプリケーションを取得する場合は、次のようにします。

import android.content.pm.ApplicationInfo;

...

List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);

単一のアプリケーションに関する情報 (マニフェスト パッケージ名がわかっている場合) は、次の行で実行されます。

import android.content.pm.ApplicationInfo;

...

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);
于 2011-06-21T00:32:29.167 に答える
0
           ArrayList<PInfo> res = new ArrayList<PInfo>();
    final PackageManager pm = getPackageManager();
    List<ApplicationInfo> packages = pm
            .getInstalledApplications(PackageManager.GET_META_DATA);
    appName = new String[packages.size()];
    for (ApplicationInfo packageInfo : packages) {
    appName[count] = packageInfo.loadLabel(getPackageManager()).toString();
    count++;
    }

上記のコードは、バージョン、ロゴ、アプリ名、パッケージ名、許可、インストールされたアプリに関するすべての情報など、Android デバイスにインストールされているアプリケーションに関するすべての情報を取得するために使用します。

于 2011-06-21T05:41:48.510 に答える