`
u011721609
  • 浏览: 45073 次
社区版块
存档分类
最新评论

Android获取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;
	}
	
}

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

分享到:
评论

相关推荐

    获取SD卡中的apk信息

    获取SD卡中的apk信息是一项常见的需求,例如,开发者可能需要分析SD卡上已安装或未安装的应用程序,或者进行应用管理。这篇博客"获取SD卡中的apk信息"可能详细介绍了如何通过编程方式来实现这一功能。下面将深入探讨...

    Android实现下载APK文件并自动执行安装

    在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...

    Android获取SD卡信息的接口

    在Android系统中,获取SD卡(外部存储)信息是开发者常用的功能之一,这通常涉及到读取可用存储空间、总容量等信息。本DEMO提供了一种实现方式,确保了兼容性,可以在多种不同类型的手机上运行。下面我们将详细讨论...

    android SD卡文件浏览器

    在Activity的`onCreate()`方法中,获取SD卡路径并调用`listFiles()`方法,将文件信息填充到ListView或RecyclerView中。 3.3 实现操作功能 为菜单项设置点击事件,处理相应的文件操作。例如,点击“删除”按钮,调用...

    android 实现用代码安装apk

    - APK文件的路径需要是可读的,例如存储卡上的路径或者内部存储的文件路径。 - 安装APK时,需要用户确认安装操作,这无法避免。 - 使用`ACTION_VIEW`的Intent启动安装,如果APK已经安装,系统可能会提示更新,...

    android通过反射获取内置存储、SD、OTG盘的路径,适合三方apk存储查看与文件管理

    总之,通过反射机制,开发者可以在不依赖特定厂商实现的情况下,获取并管理Android设备上的各种存储路径,包括内置存储、SD卡和OTG设备,同时获取到它们的空间信息,以适应不同的设备环境。在`MountRootManagerRf....

    android加载sd卡上没安装的apk的类

    1. **获取SD卡上的APK文件**:Android提供`Environment.getExternalStorageDirectory()`方法来获取SD卡的根目录。接着,可以使用`File`类的构造函数来创建指向APK文件的`File`对象,例如`new File(Environment....

    APK 文件图标查看器

    总的来说,APK文件图标查看器是一个实用的小工具,它为Android开发者和用户提供了便捷的方式来查看APK的图标,同时也能获取SD卡上的文件信息。结合Visual Studio 2008的强大开发能力,这款工具的使用体验得到了保障...

    安卓SD卡文件管理更新信息相关-版本升级涉及到提示用户升级下载apk安装apk三部分.rar

    在安卓系统中,SD卡文件管理是用户与设备交互的重要环节,它允许用户存储、访问和管理各种数据,包括应用程序、图片、视频等。当应用需要进行版本升级时,通常会涉及三个关键步骤:提示用户升级、下载APK安装包以及...

    Android 备份(提取)apk

    有很多第三方应用如"APK Extractor",可以直接在手机上操作,方便地备份已安装的应用到存储卡或者通过邮件发送。 3. 通过设置开启备份功能: 在Android系统中,部分版本提供了应用数据备份的功能,可以在设置中...

    android 将assets 下的文件复制到手机内存中

    在Android开发中,有时我们需要将应用内部的资源文件,如配置文件、数据库文件或静态数据等,复制到手机的外部存储(内存或SD卡)以便于应用运行时使用。这个过程通常涉及到Android的文件系统操作和权限管理。下面将...

    Unity应用获取外置SD卡路径方法

    首先,我们要明确在Android平台上,外部存储通常指的是SD卡或者是设备提供的可移除存储空间。在Android 6.0(API级别23)及更高版本中,系统对存储访问进行了权限管理,因此获取外置SD卡路径前,需要确保在`...

    apk安装器android

    3. **安装过程**:APK安装器通常提供简单的操作界面,用户只需找到存储在设备或SD卡上的APK文件,点击安装即可。APK安装器.exe可能是Windows版的工具,用于在PC上管理Android设备的APK安装。 4. **更新与卸载**:...

    android:assets下的文件复制到SD卡

    确保已获取SD卡的写权限,并检查其是否可用。示例代码如下: ```java for (String fileName : files) { try { InputStream inputStream = assetManager.open(fileName); File outputFile = new File...

    android 无sdcard 下载安装 apk 多线程 断点 自动安装apk

    1. **无SD卡下载**:在Android设备上,即使没有物理SD卡,内部存储空间也可以用于下载APK文件。系统会将下载的文件存储在指定的缓存目录或外部存储(如果可用)。开发者可以通过`DownloadManager`类来管理这种下载...

    Android工具(aimsi.apk)

    Android工具(aimsi.apk)是一款专为Android操作系统设计的应用程序,主要功能是获取设备的国际移动用户识别码(IMSI)和国际移动设备身份码(IMEI),并提供发送短信的功能。这款应用的独特之处在于它支持双卡设备,...

    android中复制资源文件中的数据库文件到sd卡或内存源码

    在Android开发中,有时我们需要将预置的数据库文件与应用一起发布,并在应用程序首次启动时将其复制到外部存储(如SD卡)或内部存储(内存)中,以便于后续的操作和使用。这样的需求通常出现在那些需要提供初始数据...

    android安装系统目录下的APK包

    然而,对于非系统应用,用户下载或手动安装的APK可能保存在外部存储(如SD卡)的特定文件夹中。 安装APK的过程分为以下几个步骤: 1. **获取APK文件**:首先,你需要拥有APK文件,这可以通过从Google Play商店下载...

    Android App调用没有安装的apk

    - 将插件APK的.dex文件提取到内存或存储中,如SD卡。 - 创建自定义的ClassLoader,指定 dex 文件的位置。 - 使用ClassLoader加载插件的类,并通过反射调用其方法。 4. **安全与权限管理**:由于插件apk无需安装...

    获取安装的apk

    需要注意的是,从Android 6.0(API级别23)开始,用户需要给予应用写入外部存储的权限,才能读取安装在SD卡上的APK。 **关于"Application_VariableApp1":** 这个文件名称可能是某个特定应用的实例,但没有足够的上...

Global site tag (gtag.js) - Google Analytics