Android应用升级后安装到一半闪退解决方法
初始安装时,文件被保存在:
data/app + [包名].apk
覆盖安装N次后,文件名为:
data/app + [包名]-N.apk
获取文件时写法不变,在获取文件之后保存在本地目录后打开更新程序之前,动态获取当前下载文件名及路径,即可解决No content provider found for permission revoke问题。
范例如下:(只有获取以及打开部分。其余部分不变)
//下载文件部分(红字为需要注意部分,即动态获取到当前文件名,及路径,包括-N)
LoginAutoUpdateActivity.mSavePath=PackageManager().getApplicationInfo("increase", 0).sourceDir;
URL url = new URL(mURL);
// 创建连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
t();
// 获取文件大小
LoginAutoUpdateActivity.length = ContentLength();
Log.d("我获取的文件大小","``````"+LoginAutoUpdateActivity.length);
// 创建输入流
InputStream is = InputStream();
File file = new File(LoginAutoUpdateActivity.mSavePath);
// 判断文件目录是否存在
if (!ists())
{
file.mkdir();
}
File apkFile = new File(LoginAutoUpdateActivity.mSavePath, "mc-increase-v3.apk");
// FileOutputStream fos = new FileOutputStream(apkFile);
FileOutputStream fos = mContext.openFileOutput("mc-increase-v3.apk", mContext.MODE_WORLD_READABLE);
int count = 0;
// 缓存
byte buf[] = new byte[1024];
// 写入到文件中
do
{
int numread = is.read(buf);
count += numread;
// 计算进度条位置
// progress = (int) (((float) count / length) * 100);
LoginAutoUpdateActivity.progress=count;
// 更新进度
mHandler.sendEmptyMessage(DOWNLOAD);
if (numread <= 0)
{
// 下载完成
mHandler.sendEmptyMessage(手机总是闪退是什么原因DOWNLOAD_FINISH);
break;
}
// 写入文件
fos.write(buf, 0, numread);
} while (!LoginAutoUpdateActivity.cancelUpdate);// 点击取消就停止下载.
fos.close();
is.close();
//打开文件部分(红字体部分为获取当前的实际文件,被注释的是写死的部分,在很多手机下会无法读取)
/**
* 安装APK文件
*/
private void installApk
{
// File apkfile = new File(mSavePath,"mc-increase-v3.apk");
File apkfile=new File(mSavePath);
Log.d("mSavePath", mSavePath);
if (!ists())
{
return;
}
// 通过Intent安装APK文件
String cmd = "chmod 777 " +mSavePath;
try {
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
e.printStackTrace();
}
Intent i = new Intent();
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.t.Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + String()), "application/vnd.android.package-archive");
startActivity(i);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论