Android没有SD卡怎么实现自动更新?

时间:2021-04-27 22:54:29
如题,我现在的设备现在是没有sd卡的,只能将文件下载到data/data/com.****.***/download目录下,也就是我当前程序所在的目录,然后在调用系统的安装的时候‘解析包错误’,在网上搜索一下,有人说是当前文件在该目录下不具备读写权限,然后在添加了一下他修改文件权限的代码:

private void installApk() {
//安装文件
modJurisdiction();
File apkfile = new File(mSavePath, mHashMap.get("name"));
if (!apkfile.exists()) {
return;
}
// 通过Intent安装APK文件
System.out.println(apkfile.toString());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
"application/vnd.android.package-archive");
mContext.startActivity(i);
}

private void modJurisdiction() {
String fileName = mSavePath+"/"+mHashMap.get("name");//文件目录

// [文件604:-rw----r--]
String[] args = { "chmod", "604",fileName};
// System.out.println("apk position:" +fileName);
exec(args);
}
/**
*修改权限的方法
*/
public String exec(String[] args) {
String result = "";
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
baos.write('n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
System.out.println(result);
return result;
}



然后问题重现,还是解析包错误,求大神指点!!

4 个解决方案

#1


你的应用对自己的data目录是有读写权限的,没有的执行权限

#2


引用 1 楼 sagittarius1988 的回复:
你的应用对自己的data目录是有读写权限的,没有的执行权限

是要加个执行权限么。。。这问题也挺感兴趣的。

#3


引用 2 楼 u013676055 的回复:
Quote: 引用 1 楼 sagittarius1988 的回复:

你的应用对自己的data目录是有读写权限的,没有的执行权限

是要加个执行权限么。。。这问题也挺感兴趣的。


在创建文件的时候将权限改成Context.MODE_WORLD_READABLE,应该就可以了

#4


判断一下,如果没有SD卡则使用浏览器打开apk下载地址,让用户自己去处理

#1


你的应用对自己的data目录是有读写权限的,没有的执行权限

#2


引用 1 楼 sagittarius1988 的回复:
你的应用对自己的data目录是有读写权限的,没有的执行权限

是要加个执行权限么。。。这问题也挺感兴趣的。

#3


引用 2 楼 u013676055 的回复:
Quote: 引用 1 楼 sagittarius1988 的回复:

你的应用对自己的data目录是有读写权限的,没有的执行权限

是要加个执行权限么。。。这问题也挺感兴趣的。


在创建文件的时候将权限改成Context.MODE_WORLD_READABLE,应该就可以了

#4


判断一下,如果没有SD卡则使用浏览器打开apk下载地址,让用户自己去处理