`
kalogen
  • 浏览: 878191 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android获取SD卡上的APK文件,并且判断是否安装过、是否可以更新到新版本的工具类

 
阅读更多

 如下就是一个工具类,其作用是采用递归扫描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;
	}
	
}

 如果有人看到并且指出上述代码不足支出,非常感谢! 

摘自:http://my.oschina.net/keeponmoving/blog/61749 

分享到:
评论

相关推荐

    android SD卡文件浏览器

    总结,Android SD卡文件浏览器是Android设备上不可或缺的工具,它使用户能够高效地管理自己的数据。开发者在实现这一功能时,不仅要关注基本的文件操作,还要注重用户体验和安全性的考虑,从而打造一款功能强大且...

    安卓SD卡文件管理更新信息相关-android检查版本更新.rar

    在Android系统中,SD卡(Secure Digital Card)主要用于扩展设备的存储空间,用户可以将照片、音乐、视频等文件存储到SD卡上。文件管理是Android应用开发中的一个重要环节,尤其是当涉及到版本更新时,开发者需要...

    安卓SD卡文件管理更新信息相关-UpdateHelper是一个为了简化AndroidApp的迭代升级开发的AndroidLibrary.zip

    当涉及到文件管理时,特别是更新信息,UpdateHelper库可能提供了处理SD卡上的更新文件和检查新版本的API。这包括读取SD卡上的更新文件、验证文件的完整性以及在后台线程中安全地进行文件替换或安装。 `JavaApk源码...

    Android应用程序的自动更新升级

    3. **下载新版本APK**:如果检测到新版本,将从服务器下载最新的APK文件至SD卡中。 4. **监听安装状态**:监听新版本的APK文件安装进度,安装完成后自动删除下载的文件。 #### 三、程序框架流程 1. **版本检测**:...

    AndroidKiller修复反编译源码卡死

    AndroidKiller是一款常用的Android应用分析工具,它可以帮助开发者或安全研究人员查看APK的源代码、资源文件、反编译Dex文件等,以理解应用的工作原理或寻找潜在的安全漏洞。 在描述中提到的“修复反编译源码卡死”...

    android动态加载class文件(DexClassLoader可从SD卡加载)(android插件开发)

    标题中的"android动态加载class文件(DexClassLoader可从SD卡加载)"指的是利用Android的DexClassLoader类来实现从外部存储(如SD卡)加载Dalvik执行文件(.dex)的能力。这一技术在开发过程中能显著提升应用的灵活...

    android加载第三方apk插件

    1. 监听SD卡上`Plugin.apk`的变化,当检测到新版本时,自动或提示用户更新。 2. 实现热更新机制,允许在不重启应用的情况下替换旧插件。 3. 处理版本兼容性问题,确保新旧插件能与主应用协同工作。 总结来说,...

    安卓SD卡文件管理更新信息相关-app更新实现service下载.rar

    Android提供了`Environment`类,用于获取SD卡(或外部存储)的相关路径,如`getExternalStorageDirectory()`方法返回根目录,`getExternalFilesDir()`则返回应用私有的外部存储目录。此外,`File`类是处理文件操作的...

    适用于 Android 设备的简单而强大的文件浏览器.rar

    1. **Android 文件管理系统**:Android 设备允许用户访问和管理设备上的所有文件,包括内部存储和外部 SD 卡。文件浏览器是实现这一功能的重要工具。 2. **文件管理器功能**:一款好的文件浏览器通常包括浏览目录、...

    五,Android文件IO详解

    Android提供了`FileUtils`(非官方,如开源库Apache Commons IO)这样的工具类,它们提供了一些便利的方法,如复制文件、移动文件、判断文件是否存在等,简化了文件操作的代码。 总的来说,Android文件I/O涵盖了很...

    android 导出,安装 卸载 讲解

    1. 将APK文件复制到设备的存储卡或者连接设备到电脑,通过USB传输。 2. 在设备上,打开“设置”,找到“安全”或“关于手机”,启用“未知来源”以允许安装非Play Store的应用。 3. 找到APK文件,点击运行安装。系统...

    基于Android软件管理工具需求文档.pdf

    综合上述信息,这份需求文档是针对Android软件管理工具的,它需要支持多个Android版本和API级别,采用Eclipse作为开发环境和Java作为编程语言,能够处理APK文件以及与SD卡等存储介质交互,并具备管理常见应用如Gmail...

    安卓Android源码——小米系列之小米文件管理器.zip

    1. **Android文件系统**:讲解Android系统中的文件存储结构,包括内部存储、外部存储以及SD卡的使用。 2. **Android UI设计**:通过图片展示小米文件管理器的界面设计,包括布局、控件、颜色搭配和交互逻辑。 3. *...

    android获取手机root权限比较方便的方法.pdf

    首先,确保你的电脑上已经安装了如91手机助手或豌豆夹之类的手机管理软件,这类软件能够帮助电脑识别连接的Android设备,并进行数据传输和管理。这些助手软件通常需要开启手机的USB调试模式,你可以在开发者选项中...

    适配android9.0的dumpdex

    在Android系统中,"dumpdex"通常是指一种工具或技术,用于从已安装的应用程序中提取DEX(Dalvik Executable)文件,这是Android应用程序的主要执行文件。标题提到的"适配android9.0的dumpdex"意味着这个版本的...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    计算机电脑用java模拟器运行安卓Android手机软件.pdf

    - 可以使用如UltraISO之类的工具打开并修改SD卡文件。 - 修改完成后记得保存,并关闭模拟器再重新启动以应用更改。 #### 四、常见问题与解决方法 - **模拟器启动缓慢或卡顿**:检查计算机的硬件配置是否满足...

    Android高手进阶教程

    - adb install 命令:用于安装一个apk文件到指定的设备上。若目标设备为模拟器,需要指定模拟器的端口号。 - emulator -avd avd_name命令:启动名为avd_name的Android虚拟设备,简化了操作流程,避免了通过Eclipse...

Global site tag (gtag.js) - Google Analytics