我正在使用以下代码从网站和APK更新文件下载:
URL url = new URL(urls[0]);
HttpURLConnection connection2 = (HttpURLConnection) url.openConnection();
connection2.setRequestMethod("GET");
connection2.setDoOutput(true);
connection2.connect();
int lenghtOfFile = connection2.getContentLength();
String PATH = ctx.getFilesDir()+"/";
File apkdir=new File (PATH);
apkdir.mkdirs();
File newInstall=new File(apkdir, "app.apk");
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(newInstall);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int)(total*100/lenghtOfFile));
prog=(int)(total*100/lenghtOfFile);
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
并且对于打开文件我使用:
Intent install=new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(new File(ctx.getFilesDir()+"/app.apk")), "application/vnd.android.package-archive");
这就出现了问题 - 我只是将下载的应用程序存储到Context.getFilesDir()中,但是当我提示安装价格时,logcat说“无法读取androidmanifest.xml。你在哪里看到问题?我需要由于安全原因,用户下载到内部,而不是可访问的内存。
答案 0 :(得分:3)
出于安全原因,我需要由用户下载到内部,而不是可访问的内存。
这完全是胡说八道。用户仍然可以访问您下载的文件,尤其是在您安装文件时。
您的问题是安装程序无法读取该文件。将其存储在外部存储中,或者您需要使用openFileOutput()
与MODE_WORLD_READABLE
而不是new FileOutputStream
来获取OutputStream
。