`

有无SD卡情况下,下载Apk,并安装

 
阅读更多
有无SD卡情况下,下载Apk,并安装



今天遇到一个问题,我的任务是 下载一个apk,并安装,但是在无SD卡的情况下,包解析错误


我的思路是:
有SD卡 就下载到SD卡,无SD卡就下载到getCacheDir()下面

但是 因为这个目录是只能自己app使用,所以安装的时候 就报了包解析错误的问题

我猜测原因是因为没有权限访问/data/data/com.xxx.xx/cache这个目录,所以 需要设置个权限。

解决方法


File tFile = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
  tFile = new File(FILE_PATH);
}else{
  tFile = new File(mContext.getFilesDir(), URL_APP.hashCode()+".apk");
}


然后 下载完成的时候,一般都有一个rename的过程,这个时候 需要做一下处理

private void renameFile(){
		File file=new File(targetFile+DOWNLOAD_SUFFIX);
		File target=new File(targetFile);
		if(target.exists())
			target.delete();
		if(isInnerDir(file)){
			FileOutputStream tFos = null;
			FileInputStream tFis = null;
			try {
				tFos = FexApplication.getInstance().openFileOutput(target.getName(), Context.MODE_WORLD_READABLE);
				tFis = FexApplication.getInstance().openFileInput(file.getName());
				byte[] buffer = new byte[1024];
				int length = 0;
				while((length = tFis.read(buffer)) !=-1){
					tFos.write(buffer, 0, length);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally {
				try {
					if(tFos!=null){
						tFos.close();
					}
					if(tFis!=null){
						tFis.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}else{
			try {
				file.renameTo(target);
			} catch (Exception e) {
				e.printStackTrace();
			}		
		}
	}
	
	private boolean isInnerDir(File tFile){
		return tFile.getAbsolutePath().contains("data/data") && !tFile.getAbsolutePath().contains("Android");
	}



主要就是 这个方法
openFileOutput(target.getName(), Context.MODE_WORLD_READABLE);



逻辑比较简单,直接看代码就行




分享到:
评论

相关推荐

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

    通常,会在外部存储(如SD卡)的特定目录下创建一个临时文件。Android提供`Environment.getExternalStorageDirectory()`方法获取外部存储根目录,并结合`Context.getExternalFilesDir()`或`getExternalCacheDir()`...

    Android中下载apk文件并安装

    这段代码将从指定URL下载APK文件到SD卡的download目录下。需要注意的是,你需要在AndroidManifest.xml中添加读写SD卡的权限: ```xml ``` 下载完成后,我们不能立即安装,因为Android系统出于安全考虑,不允许非...

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

    开发者需要提供APK的URL,并设置下载路径,通常是SD卡上的特定目录。下载完成后,系统会自动触发安装提示。 3. **安装APK**: 下载完成的APK文件,用户可以通过点击通知或者应用内的提示进行安装。在安卓中,非...

    Unity中安装APK

    // 假设APK位于SD卡上 InstallApk(apkPath); } } ``` 这里的`InstallApk`函数是通过`DllImport`属性声明的,它告诉Unity这个函数是在原生代码中定义的。 #### 5. 调用安装 最后,在游戏中触发安装动作时,只...

    android 默认安装apk 到sdcard

    然而,默认情况下,Android设备会将APK安装到内部存储器中,这可能导致内存空间不足,特别是在内部存储空间有限的设备上。针对这一问题,Android提供了将APK默认安装到外部存储器(如SD卡或TF卡)的设置选项,以扩大...

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

    综上所述,通过合理利用Android提供的API和服务,开发者可以实现无SD卡环境下的高效、安全、便捷的APK下载与安装。在实际开发中,可能还需要考虑到设备性能、内存管理以及用户体验等因素,以打造更加完善的下载和...

    xapk安装器 快捷方便滴安装 删除 .apk、.xapk 格式应用文件.rar

    自动扫描并预览手机和SD卡上的所有 .apk、.xapk 格式文件; 自动删除或安装APK、XAPK (APK与缓存数据或obb文件)文件; 支持从 Windows XP、Vista、7、8、8.1、10 连接到安卓设备,使用安卓手机和平板电脑免费在线...

    apk安装器android

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

    获取SD卡中的apk信息

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

    APK安装过程及原理详解

    4. **第三方应用安装**:用户通过本地存储介质(如SD卡)上的APK文件进行安装,安装过程提供用户交互界面。 #### 三、安装流程及路径 APK的安装过程涉及多个系统目录: - **system/app**:存放系统自带的应用程序...

    sd卡双重挂载apk

    5. **安装与使用**:`DualMountSD_CN_Signed.apk`可能是一个实现SD卡双重挂载功能的应用程序,用户需要先下载并安装这个APK。安装完成后,根据应用的引导进行设置,将SD卡分区并挂载。`说明t.doc`可能是该应用的使用...

    如何在电脑上安装安卓模拟器(附_APK安装法_,SD卡文件管理,安卓模拟器,apk安装器下载地址).doc

    本文将详细介绍在电脑上安装安卓模拟器的过程,包括必要的环境配置、模拟器的安装与设置、APK文件的安装以及SD卡文件的管理。 #### 一、安装 Java JDK 1.6 及配置环境变量 1. **下载与安装**: - 下载 Java JDK ...

    Android第一次开机安装T卡Apk

    在Android系统中,"Android第一次开机安装T卡Apk"是指一种特定的系统启动流程,它涉及到了设备首次开机时自动识别并安装存储在T卡(即microSD卡)上特定目录的应用程序。这个过程是设计来使得用户无需手动安装预装...

    android应用内更新,版本更新,下载apk自动安装,适配7.0打开文件地址、适配8.0apk安装,demo超详解

    写了一个demo,适用于app内部更新,并且带有弹窗提示更新内容,弹窗提示apk下载进度,状态栏发送通知提示下载进度,下载完成自动执行安装程序,适配7.0文件打开sd卡文件,适配8.0自动安装,内附超详细注释

    android apk安装流程及解析

    4. **第三方应用安装**:通过SD卡中的APK文件进行安装,具有安装界面,安装过程由`packageinstaller.apk`负责处理。 #### 三、涉及的关键目录 - **system/app**:存储系统自带的应用程序,需要root权限才能删除。 ...

    android安装系统目录下的APK包

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

    安卓apk安装位置选择sd卡

    安卓apk安装位置选择sd卡 替换掉原机的 OPackageInstaller.apk 或者 PackageInstaller.apk 注意名字和权限跟原来的一样 安装的时候提示你选择:默认,内部存储,sd卡

    apk 安装器 3.0

    新版本提供了Android手机软件、游戏的广告检测,提供安装后在PC执行运行,支持安装应用到SD卡上,支持多个设备选择。兼容Android 1.5到Android 3.2之间的手机和平板设备。 APK安装器 v3.0 中文免费版更新内容: + ...

    APK 静默安装

    1. 获取APK文件:首先,你需要拥有待安装的APK文件,并将其放在设备可以访问的位置,如内部存储或外部SD卡。 2. 获得系统权限:由于静默安装需要系统权限,所以你需要确保设备已经获取了root权限,或者你的APK已经...

    安卓文件下载上传解压相关-apk下载自动安装.rar

    在安卓平台上,文件的下载、上传和解压是常见的操作,尤其对于APK(Android应用程序包)文件,用户经常需要下载并安装它们来扩展手机的功能。这个名为"安卓文件下载上传解压相关-apk下载自动安装.rar"的压缩包可能...

Global site tag (gtag.js) - Google Analytics