【PackageManager】Android獲取已安裝應用資訊(圖示,名稱,版本號,包)

NO IMAGE

原文地址為:【PackageManager】Android獲取已安裝應用資訊(圖示,名稱,版本號,包)

Android 菜市場上有一款應用較 ShareApp,可以顯示,管理,分享Android手機上安裝的應用。

但比較不爽的是,它把很多系統自帶的應用程式也都顯示了出來。這些程式往往是無法解除安裝的,更無法分享,讓“已安裝應用程式”的列表顯的非常凌亂。

我在手機上執行了一下,結果Gtalk,DRMService這些系統應用都顯示出來了..比較不爽。

於是自己寫了個程式,看看能不能只顯示使用者自己安裝的程式。

程式大概分成三個部分:

1.獲取手機已安裝的所有應用package的資訊(其中包括使用者自己安裝的,還有系統自帶的);

2.濾除系統自帶應用;

3.通過列表顯示出應用程式的圖示(icon),和其他文字資訊(應用名稱,包名稱package name,版本號等等)

首先,我們定義一個資料結構,來儲存應用程式資訊(icon,name,packageName,versionName,versionCode,等)

public class AppInfo {
public String appName="";
public String packageName="";
public String versionName="";
public int versionCode=0;
public Drawable appIcon=null;
public void print()
{
Log.v("app","Name:" appName " Package:" packageName);
Log.v("app","Name:" appName " versionName:" versionName);
Log.v("app","Name:" appName " versionCode:" versionCode);
}

}

然後我們通過PackageManager 來獲取已安裝的應用包資訊。

     ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); //用來儲存獲取的應用資訊資料
     List
<
PackageInfo
>
packages
=
getPackageManager().getInstalledPackages(
0
);
for
(
int
i
=
0
;i
<
packages.size();i

) { PackageInfo packageInfo
=
packages.get(i); AppInfo tmpInfo
=

new
AppInfo(); tmpInfo.appName
=
packageInfo.applicationInfo.loadLabel(getPackageManager()).toString(); tmpInfo.packageName
=
packageInfo.packageName; tmpInfo.versionName
=
packageInfo.versionName; tmpInfo.versionCode
=
packageInfo.versionCode; tmpInfo.appIcon
=
packageInfo.applicationInfo.loadIcon(getPackageManager());
appList.add(tmpInfo); }

//好啦 這下手機上安裝的應用資料都存在appList裡了。

那麼如何判斷一個應用是否為系統應用呢?

if
((packageInfo.applicationInfo.flags
&
ApplicationInfo.FLAG_SYSTEM)
==
0
){
//
非系統應用

}
else

{
//系統應用        
}

所以如果只需要獲取到非系統應用資訊,程式碼如下:

ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); //用來儲存獲取的應用資訊資料
List
<
PackageInfo
>
packages
=
getPackageManager().getInstalledPackages(
0
);
for
(
int
i
=
0
;i
<
packages.size();i

) { PackageInfo packageInfo
=
packages.get(i); AppInfo tmpInfo
=

new
AppInfo(); tmpInfo.appName
=
packageInfo.applicationInfo.loadLabel(getPackageManager()).toString(); tmpInfo.packageName
=
packageInfo.packageName; tmpInfo.versionName
=
packageInfo.versionName; tmpInfo.versionCode
=
packageInfo.versionCode; tmpInfo.appIcon
=
packageInfo.applicationInfo.loadIcon(getPackageManager());
//
Only display the non-system app info

if
((packageInfo.applicationInfo.flags
&
ApplicationInfo.FLAG_SYSTEM)
==
0
) { appList.add(tmpInfo);//如果非系統應用,則新增至appList } }

最後,我們可以自定義一個app_row.xml的layout 檔案,用來顯示appList中的資料

 

 

 

獲取本程式的一些資訊:

PackageManager mPackageManager = getPackageManager();
  PackageInfo mPackageInfo;
  try {
   mPackageInfo = mPackageManager.getPackageInfo(“com.function.im”, 0);
   VersionName=mPackageInfo.versionName;
  } catch (NameNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

轉載請註明本文地址:【PackageManager】Android獲取已安裝應用資訊(圖示,名稱,版本號,包)