0

我试图从我的服务器下载一个 APK 文件并将其保存在 Phone Storage中。

以下是我使用的代码:

            String apkLink = "http://10.1.20.53/files/test.apk";
            URL url = new URL(apkLink);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            context.getDir("test.apk", Context.MODE_WORLD_WRITEABLE);
            FileOutputStream fos = context.openFileOutput("app_test.apk", Context.MODE_WORLD_WRITEABLE);

            InputStream is = c.getInputStream();
            fileSize = c.getContentLength();
            byte[] buffer1 = new byte[1024];
            int len1 = 0;
            int total = 0;
            while ((len1 = is.read(buffer1)) != -1) {
                total += len1;
                percentage = (int)(total*100/fileSize);
                publishProgress();
                fos.write(buffer1, 0, len1);
            }
            fos.close();
            is.close();

相同的代码适用于 XML 文件。(当我将 XML 文件下载到手机内存时)。

有人可以帮我弄这个吗?

谢谢


其实我已经知道原因了

context.getDir("test.apk", Context.MODE_WORLD_WRITEABLE); 代码行创建一个名为“data/data/package_name/app_test.apk”的目录

但是 FileOutputStream fos = context.openFileOutput("app_test.apk"); 创建一个名为 data/data/package_name/files/app_test.apk 的目录

我试图从 data/data/package_name/app_test.apk 目录中读取文件。

不管怎样,现在我要用这段代码执行这个文件,

File f = new File(getFilesDir()+ "/app_test.apk");

intent.setDataAndType(Uri.fromFile(f) , "application/vnd.android.package-archive");
startActivity(intent);

但它给了我一个解析错误信息。

任何人都可以想到一个解决方案?

谢谢你。

4

2 回答 2

1

创建文件时尝试使用 Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE。

于 2012-06-01T08:21:33.720 回答
0

我在这里回答了类似的问题。考虑到您的问题,我有几个不同的意见,为什么它不起作用。

  1. 您的应用程序将 apk 下载到其私有文件夹中,并且 PackageManager 可能没有读取此文件夹的权限。尝试将应用程序下载到 sdcard 上并运行它。
  2. 也许您的 .apk 文件没有正确签名。您是否使用生成的签名对其进行了签名,或者使用默认测试签名导出文件?
  3. 如果您在真实设备上进行测试,请检查是否可以从其他来源安装文件(不仅来自 Google Play 市场)
  4. 我不记得确切但可能调用 PackageManager 来安装需要权限的应用程序。
于 2012-05-31T11:43:10.743 回答