有无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);
逻辑比较简单,直接看代码就行
分享到:
相关推荐
自动扫描并预览手机和SD卡上的所有 .apk、.xapk 格式文件; 自动删除或安装APK、XAPK (APK与缓存数据或obb文件)文件; 支持从 Windows XP、Vista、7、8、8.1、10 连接到安卓设备,使用安卓手机和平板电脑免费在线...
版本升级,涉及到提示用户升级、下载 apk、安装 apk 三部分.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
如何在电脑上安装安卓模拟器(附_APK安装法_,SD卡文件管理,安卓模拟器,apk安装器下载地址)
android 默认安装apk 到sdcard tf 卡
写了一个demo,适用于app内部更新,并且带有弹窗提示更新内容,弹窗提示apk下载进度,状态栏发送通知提示下载进度,下载完成自动执行安装程序,适配7.0文件打开sd卡文件,适配8.0自动安装,内附超详细注释
新版本提供了Android手机软件、游戏的广告检测,提供安装后在PC执行运行,支持安装应用到SD卡上,支持多个设备选择。兼容Android 1.5到Android 3.2之间的手机和平板设备。 APK安装器 v3.0 中文免费版更新内容: + ...
安卓apk安装位置选择sd卡 替换掉原机的 OPackageInstaller.apk 或者 PackageInstaller.apk 注意名字和权限跟原来的一样 安装的时候提示你选择:默认,内部存储,sd卡
首次启动时,它将搜索存储在SD卡上的所有APK文件,并显示它们供您安装。对于其他启动,它将自动从缓存加载应用程序信息,以节省大量时间。如果SD卡内容在必要时更改,请单击选项菜单中的刷新按钮以重建缓存。
android加载sd卡上没安装的apk的activity
NULL 博文链接:https://justwyy.iteye.com/blog/1460612
最近做的一个Android项目,发现多款4.1操作系统的手机自带的浏览器下载apk后,在消息提示那里点击...经测试发现在手机sd卡中找到下载的apk点击又是可以安装的。 最后针对这个情况做了下解决方案的处理。详情见文档。
ad卡双重挂载apk
•从外部存储和SD卡扫描apk文件 •显示总apk文件 •单击安装apk文件 •从外部存储和SD卡删除apk文件 •与朋友分享apk文件 •按名称命令apk列表,大小,包,版本,已安装和未安装 •Apk文件状态 兼容Android 7.0及更...
分辨率自适应多功能管应用管理软件平板使用左右fragment显示手机使用activity显示有任务管理器SD卡浏览器记事本功能还有一个转存apk并安装的功能但是需要在源码asset文件夹中内置apk才有效.rar,太多无法一一验证是否...
包括获取所有apk,所有第三方apk,所有系统apk,安装在sd卡上apk的功能
Link2SD使得Android1.6\+并且获得ROOT权限的手机用户能够简单方便得将程序移动到SD卡上。 本程序的初衷和apps2sd脚本类似,都是连接SD卡上的第二分区安装程序,不过本程序...-显示手机、SD卡、SD卡第二分区可用存储大小
APK Helper是一个帮助高级玩家快速... 使用非原版的程序可能会造成密码帐号被伪装成官方软件的应用窃取,或者话费被窃,被安装流氓软件,或者隐私泄漏甚至被恶意程序格式化手机和SD卡,损失珍贵的照片、联系人信息。
主要包括了下载和安装APK、检查Apk更新、显示’已经是最新’或者’无法获取版本信息’对话框、获取当前客户端版本信息、显示版本更新通知对话框、显示下载对话框、判断是否挂载了SD卡、显示文件大小格式:2个小数点...
* 本例是一个下载app的事例 * 分2种,一种用ProgressDialog进度条,另一种用Notification通知栏 * 本例着重 在手机无SD卡时候,不得不下载到/data/data/packageName/files/ 目录下
从SD卡轻松扫描并安装市场和非市场应用程序。 功能齐全的安装程序,具有小巧的尺寸,人性化的设计和高性能。从SD卡轻松扫描并安装市场和非市场应用程序。 特点: *安装和删除SD卡中的应用程序。 *自动扫描SD卡中的...