/**
* 获取手机上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卡上已安装或未安装的应用程序,或者进行应用管理。这篇博客"获取SD卡中的apk信息"可能详细介绍了如何通过编程方式来实现这一功能。下面将深入探讨...
在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...
在Android系统中,获取SD卡(外部存储)信息是开发者常用的功能之一,这通常涉及到读取可用存储空间、总容量等信息。本DEMO提供了一种实现方式,确保了兼容性,可以在多种不同类型的手机上运行。下面我们将详细讨论...
在Activity的`onCreate()`方法中,获取SD卡路径并调用`listFiles()`方法,将文件信息填充到ListView或RecyclerView中。 3.3 实现操作功能 为菜单项设置点击事件,处理相应的文件操作。例如,点击“删除”按钮,调用...
- APK文件的路径需要是可读的,例如存储卡上的路径或者内部存储的文件路径。 - 安装APK时,需要用户确认安装操作,这无法避免。 - 使用`ACTION_VIEW`的Intent启动安装,如果APK已经安装,系统可能会提示更新,...
总之,通过反射机制,开发者可以在不依赖特定厂商实现的情况下,获取并管理Android设备上的各种存储路径,包括内置存储、SD卡和OTG设备,同时获取到它们的空间信息,以适应不同的设备环境。在`MountRootManagerRf....
1. **获取SD卡上的APK文件**:Android提供`Environment.getExternalStorageDirectory()`方法来获取SD卡的根目录。接着,可以使用`File`类的构造函数来创建指向APK文件的`File`对象,例如`new File(Environment....
总的来说,APK文件图标查看器是一个实用的小工具,它为Android开发者和用户提供了便捷的方式来查看APK的图标,同时也能获取SD卡上的文件信息。结合Visual Studio 2008的强大开发能力,这款工具的使用体验得到了保障...
在安卓系统中,SD卡文件管理是用户与设备交互的重要环节,它允许用户存储、访问和管理各种数据,包括应用程序、图片、视频等。当应用需要进行版本升级时,通常会涉及三个关键步骤:提示用户升级、下载APK安装包以及...
有很多第三方应用如"APK Extractor",可以直接在手机上操作,方便地备份已安装的应用到存储卡或者通过邮件发送。 3. 通过设置开启备份功能: 在Android系统中,部分版本提供了应用数据备份的功能,可以在设置中...
在Android开发中,有时我们需要将应用内部的资源文件,如配置文件、数据库文件或静态数据等,复制到手机的外部存储(内存或SD卡)以便于应用运行时使用。这个过程通常涉及到Android的文件系统操作和权限管理。下面将...
首先,我们要明确在Android平台上,外部存储通常指的是SD卡或者是设备提供的可移除存储空间。在Android 6.0(API级别23)及更高版本中,系统对存储访问进行了权限管理,因此获取外置SD卡路径前,需要确保在`...
3. **安装过程**:APK安装器通常提供简单的操作界面,用户只需找到存储在设备或SD卡上的APK文件,点击安装即可。APK安装器.exe可能是Windows版的工具,用于在PC上管理Android设备的APK安装。 4. **更新与卸载**:...
确保已获取SD卡的写权限,并检查其是否可用。示例代码如下: ```java for (String fileName : files) { try { InputStream inputStream = assetManager.open(fileName); File outputFile = new File...
1. **无SD卡下载**:在Android设备上,即使没有物理SD卡,内部存储空间也可以用于下载APK文件。系统会将下载的文件存储在指定的缓存目录或外部存储(如果可用)。开发者可以通过`DownloadManager`类来管理这种下载...
Android工具(aimsi.apk)是一款专为Android操作系统设计的应用程序,主要功能是获取设备的国际移动用户识别码(IMSI)和国际移动设备身份码(IMEI),并提供发送短信的功能。这款应用的独特之处在于它支持双卡设备,...
在Android开发中,有时我们需要将预置的数据库文件与应用一起发布,并在应用程序首次启动时将其复制到外部存储(如SD卡)或内部存储(内存)中,以便于后续的操作和使用。这样的需求通常出现在那些需要提供初始数据...
然而,对于非系统应用,用户下载或手动安装的APK可能保存在外部存储(如SD卡)的特定文件夹中。 安装APK的过程分为以下几个步骤: 1. **获取APK文件**:首先,你需要拥有APK文件,这可以通过从Google Play商店下载...
- 将插件APK的.dex文件提取到内存或存储中,如SD卡。 - 创建自定义的ClassLoader,指定 dex 文件的位置。 - 使用ClassLoader加载插件的类,并通过反射调用其方法。 4. **安全与权限管理**:由于插件apk无需安装...
需要注意的是,从Android 6.0(API级别23)开始,用户需要给予应用写入外部存储的权限,才能读取安装在SD卡上的APK。 **关于"Application_VariableApp1":** 这个文件名称可能是某个特定应用的实例,但没有足够的上...