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 アプリケーション内では機能しません。他の提案はありますか?