/**
* 獲取手機上apk檔資訊類,主要是判斷是否安裝再手機上了,安裝的版本比較現有apk版本資訊
* <A href="HTTP://my.oschina.net/arthor" rel=nofollow target=_blank>@author</A> Dylan
*/
public class ApkSearchUtils {
private static int INSTALLED = 0; // 表示已經安裝,且跟現在這個apk檔是一個版本
private static int UNINSTALLED = 1; // 表示未安裝
private static int INSTALLED_UPDATE =2; // 表示已經安裝,版本比現在這個版本要低,可以點擊按鈕更新

private CoNtext coNtext;
private List<MyFile> myFiles = new ArrayList<MyFile>();

public List<MyFile> getMyFiles() {
return myFiles;
}

public void setMyFiles(List<MyFile> myFiles) {
this.myFiles = myFiles;
}

public ApkSearchUtils(CoNtext coNtext) {
super();
this.coNtext = coNtext;
}

/**
* @param args
* 運用遞迴的思想,遞迴去找每個目錄下面的apk檔
*/
public void FindAllAPKFile(File file) {

// 手機上的檔,目前只判斷SD卡上的APK檔
// file = Environment.getDataDirectory();
// SD卡上的檔目錄
if (file.isFile()) {
String name_s = file.getName();
MyFile myFile = new MyFile();
String apk_path = null;
// MimeTypeMap.getSingleton()
if (name_s.toLowerCase().endsWith(".apk")) {
apk_path = file.getAbsolutePath();// apk檔的絕對路勁
// System.out.println("----" + file.getAbsolutePath() + "" +
// name_s);
PackageManager pm = coNtext.getPackageManager();
PackageInfo packageInfo = pm.getPackageArchiveInfo(apk_path, PackageManager.GET_ACTIVITIES);
ApplicationInfo appInfo = packageInfo.applicationInfo;


/**獲取apk的圖示 */
appInfo.sourceDir = apk_path;
appInfo.publicSourceDir = apk_path;
Drawable apk_icon = appInfo.loadIcon(pm);
myFile.setApk_icon(apk_icon);
/** 得到包名 */
String packageName = packageInfo.packageName;
myFile.setPackageName(packageName);
/** apk的絕對路勁 */
myFile.setFilePath(file.getAbsolutePath());
/** apk的版本名稱 String */
String versionName = packageInfo.versionName;
myFile.setVersionName(versionName);
/** apk的版本號碼 int */
int versionCode = packageInfo.versionCode;
myFile.setVersionCode(versionCode);
/**安裝處理類型*/
int type = doType(pm, packageName, versionCode);
myFile.setInstalled(type);

Log.i("ok", "處理類型:"+String.valueOf(type)+"\n" + "------------------我是純潔的分割線-------------------");
myFiles.add(myFile);
}
// String apk_app = name_s.substring(name_s.lastIndexOf("."));
} else {
File[] files = file.listFiles();
if (files != null && files.length > 0) {
for (File file_str : files) {
FindAllAPKFile(file_str);
}
}
}
}

/*
* 判斷該應用是否在手機上已經安裝過,有以下集中情況出現
* 1.未安裝,這個時候按鈕應該是「安裝」點擊按鈕進行安裝
* 2.已安裝,按鈕顯示「已安裝」 可以卸載該應用
* 3.已安裝,但是版本有更新,按鈕顯示「更新」 點擊按鈕就安裝應用
*/

/**
* 判斷該應用在手機中的安裝情況
* @param pm PackageManager
* @param packageName 要判斷應用的包名
* @param versionCode 要判斷應用的版本號
*/
private int doType(PackageManager pm, String packageName, int versionCode) {
List<PackageInfo> pakageinfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo pi : pakageinfos) {
String pi_packageName = pi.packageName;
int pi_versionCode = pi.versionCode;
//如果這個包名在系統已經安裝過的應用中存在
if(packageName.endsWith(pi_packageName)){
//Log.i("test","此應用安裝過了");
if(versionCode==pi_versionCode){
Log.i("test","已經安裝,不用更新,可以卸載該應用");
return INSTALLED;
}else if(versionCode>pi_versionCode){
Log.i("test","已經安裝,有更新");
return INSTALLED_UPDATE;
}
}
}
Log.i("test","未安裝該應用,可以安裝");
return UNINSTALLED;
}

}
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()