【Android開發】獲取已安裝應用的安裝文件(apk文件)




不管是“ES文件瀏覽器”、“QQ”等應用,它們都可以獲取本機已安裝的應用程序信息,還可以發送安裝包(apk文件)給別人。

這兩天查了一些資料,有所收穫,整理一下,寫在下面。



第一步:獲取已安裝的應用列表


應用分爲兩種:一種是系統自帶的,另一種是用戶自己安裝的。

通過下面代碼可以獲取所有應用的信息:

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

通過以下代碼判斷是否是應用分類:

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


第二步:獲取已安裝的應用對應的安裝文件(apk)


//這個屬性指定了apk的路徑(如:/data/app/bassy.hair.main-1.apk)
ApplicationInfo.sourceDir

//一般來說,這兩個屬性的值和上面的屬性的值相同
ApplicationInfo.publicSourceDir
ApplicationInfo.scanPublicsourceDir


默認情況下,必須要獲取root權限,才能訪問/data/app目錄的,

如果沒有root,用文件瀏覽器進入/data目錄,會發現裏面爲空,並沒有app文件夾

但是,有一點挺奇怪的,看下面截圖


上面是adb shell工具直接查詢已安裝應用apk文件的屬性

注意權限信息“-rw-r--r--”,這表明"/data/app/bassy.hair.main-1.apk"是可讀的。

換句話說,我們可以在程序中直接訪問該文件。




另外介紹ApplicationInfo的兩個常用方法:

public CharSequence loadLabel(PackageManager pm)

public Drawable loadIcon(PackageManager pm)


ApplicationInfo.loadLabel用於獲取應用程序的名稱

ApplicationInfo.loadIcon用於獲取應用程序的圖標



部分代碼:


/** 獲取已安裝應用信息(不包含系統自帶) */
private ArrayList<AppInfo> getAppInfo()
{
	List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(
			PackageManager.GET_SIGNATURES);
	
	ArrayList<AppInfo> infos = new ArrayList<AppInfo>();

	for (ApplicationInfo info : apps)
	{
		if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
		{
			// 非系統應用
			AppInfo appInfo = new AppInfo();
			appInfo.name = info.loadLabel(getPackageManager()).toString();
			appInfo.icon  = info.loadIcon(getPackageManager());
			appInfo.path = info.sourceDir;
			appInfo.packageName = info.packageName;
			infos.add(appInfo);
		}
	}

	return infos;
}

public class AppInfo implements Serializable
{
	/** 序列號 */
	private static final long serialVersionUID = -6660233212727684115L;

	/** 名稱 */
	public String name;
	/** (路徑) */
	public String path;
	/** 圖標 */
	public Drawable icon;
	/** 包名 */
	public String packageName;
}





參考資料:

http://www.cnblogs.com/mainroadlee/archive/2011/05/23/android_get_installed_app.html

http://blog.csdn.net/zys871228/article/details/12746831

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章