2011-06-21 11 views
4

ApplicationManagerオブジェクトをPackageManagerから取得する方法はありますか?私はこれを達成するために多くの異なるタイプのメソッドを試しましたが、無駄です。私は現在、デフォルトのアンドロイドランチャー画面(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 

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

は、私がしようとしているものです。私はプルしようとしています

public void addApps(ArrayList<ApplicationInfo> list) 

:にApplicationInfoはAllApps2D.javaで以下の関数に渡されるよう

pack.getApplicationInfo(packageName, flags) 

が同じにApplicationInfoオブジェクトを返しません:

は私がことがわかりました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(); 
    } 

UPDATE

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

com.android.Launcher2.ApplicationInfo

です:私が動作するように実装したものにするためには

、私は明らかにされAllApps2Dコードが使用されていることをSAME にApplicationInfoオブジェクトを、引くことができなければなりません

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

である:

012で返されるものと同じではありません

android.content.pm.ApplicationInfo

ランチャーに利用可能なコード、そして私が働いているクラスがhere発見されました。

WITHINアンドロイドビルド内のランチャー2アプリケーションはありません。他の提案はありますか?

答えて

7

あなたはすべてのアプリケーションを取得したい場合は、次の操作を行います。

import android.content.pm.ApplicationInfo; 

... 

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0); 
+0

既に試したところ、Launcher2アプリケーションでは同じオブジェクトではなく、キャストできません。 – JoxTraex

+0

他の提案はありますか?私はこだわっていて、これをどう対処するか分からない。 – JoxTraex

+0

これは絶対に同じオブジェクトです。多分、Launcher2にはApplicationInfoという独自のクラスがあります。もしそうなら...そうですね、使ってはいけません。プラットフォームのandroid.content.pm.ApplicationInfoが明示的に重要な私のコードを使用してください。 – hackbod

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++; 
    } 
:(あなたはそのマニフェストパッケージ名を知っていることを考えれば)単一のアプリケーションについて

import android.content.pm.ApplicationInfo; 

... 

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

情報を、このラインをやっています

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

+0

既にこれを試しましたが、Launcher2アプリケーションでは同じオブジェクトではなく、キャストできません。その他の提案はありますか? – JoxTraex

関連する問題