Android - 内部数据保存getFilesDir()?

时间:2011-03-26 14:50:16

标签: android android-manifest

我正在使用以下代码从网站和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。你在哪里看到问题?我需要由于安全原因,用户下载到内部,而不是可访问的内存。

1 个答案:

答案 0 :(得分:3)

  

出于安全原因,我需要由用户下载到内部,而不是可访问的内存。

这完全是胡说八道。用户仍然可以访问您下载的文件,尤其是在您安装文件时。

您的问题是安装程序无法读取该文件。将其存储在外部存储中,或者您需要使用openFileOutput()MODE_WORLD_READABLE而不是new FileOutputStream来获取OutputStream