2011-06-21 42 views
4

有什麼辦法從PackageManager中取出ApplicationInfo對象?我嘗試了許多不同類型的方法來實現這一點,但無濟於事。我目前正在使用默認的android啓動器屏幕(應用程序抽屜),並希望從軟件包名稱中獲取軟件包信息。在應用程序層,這是而不是,但是在Launcher2應用程序的源代碼構建層。我正在使用的android版本是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) 

不返回相同的ApplicationInfo對象作爲ApplicationInfo傳遞到下面的功能在AllApps2D.java:

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(); 
    } 

UPDATE發現

基本上我想要做的是重新排序用自定義順序在啓動器中安排圖標。如果我可以通過PackageManager檢索必要的信息,那將是理想的。

爲了什麼,我已經實現了工作,我必須能夠拉SAME ApplicationInfo對象的AllApps2D代碼使用,這顯然是:這是

com.android.Launcher2.ApplicationInfo

不一樣的是什麼返回:

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

是:

android.content.pm.ApplicationInfo

可用於發射的代碼,和我一起工作的類中找到here

這些技術都不起作用WITHIN android構建中的launcher2應用程序。還有其他建議嗎?

回答

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); 
+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++; 
    } 

上述代碼用於獲取有關安裝的應用程序的所有信息,如版本,徽標,應用程序名稱,軟件包名稱,權限和所有安裝的應用程序的相關信息。

+0

已經嘗試過這種方式,它們在Launcher2應用程序中不是同一個對象,您不能施放它們。還有其他建議嗎? – JoxTraex

相關問題