Android擷取SD卡上的APK檔案,並且判斷是否安裝過、是否可以更新到新版本的工具類

來源:互聯網
上載者:User

如下就是一個工具類,其作用是採用遞迴掃描SD卡上的apk檔案,判斷該應用是否在手機上安裝過,如果安裝過再去判斷是否可以升級。具體代碼如下

 

 

/** * 擷取手機上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;}}

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.