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
是要加个执行权限么。。。这问题也挺感兴趣的。
#3
在创建文件的时候将权限改成Context.MODE_WORLD_READABLE,应该就可以了
#4
判断一下,如果没有SD卡则使用浏览器打开apk下载地址,让用户自己去处理
#1
你的应用对自己的data目录是有读写权限的,没有的执行权限
#2
你的应用对自己的data目录是有读写权限的,没有的执行权限
是要加个执行权限么。。。这问题也挺感兴趣的。
#3
你的应用对自己的data目录是有读写权限的,没有的执行权限
是要加个执行权限么。。。这问题也挺感兴趣的。
在创建文件的时候将权限改成Context.MODE_WORLD_READABLE,应该就可以了
#4
判断一下,如果没有SD卡则使用浏览器打开apk下载地址,让用户自己去处理