下载/安装apk版本23>

时间:2018-03-24 01:43:07

标签: android download apk

在阅读了有关此主题的多篇文章后,我已经能够整理下载apk更新所需的信息并安装它。这对于23岁以下的版本是成功的。阅读更多帖子后,我发现版本23>执行安装的方式略有不同。我在下面的代码中汇总了这些信息,但我仍遇到版本23>的问题。我非常了解代码在做什么,但我不知道为什么它无法运行。

try {
                URL url = new URL(arg0[0]);
                HttpURLConnection c = (HttpURLConnection) url.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
                String PATH= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() +"/";
                File file = new File(PATH);
                file.mkdirs();
                File outputFile = new File(file, "maga.apk");
                if(outputFile.exists()){
                    Log.i("SCROLLS ", "file exist-delete");
                    outputFile.delete();
                }
                FileOutputStream fos = new FileOutputStream(outputFile);
                InputStream is = c.getInputStream();
                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                   }
                fos.close();
                is.close();
                if(outputFile.exists()){
                    Log.i("SCROLLS ", "file exist");
                }
                if (Build.VERSION.SDK_INT >= 23) {
                     File toInstall=new File(Uri.parse(PATH+"maga.apk").getPath());
                    Log.i("SCROLLS ", "toInstall "+ toInstall);
                    Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", toInstall);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    startActivity(intent);
                } else {
                    File toInstall = new File(PATH, "maga" + ".apk");
                    Uri apkUri = Uri.fromFile(toInstall);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }

            } catch (Exception e) {
                Log.e("SCROLLS ", "Update error! " + e.getMessage());
            }
            return null;
        }
    }

在版本<23的仿真器上执行时,所有工作都可以。在23以上的模拟器上,进度进入If语句并设置toInstall值,但之后没有任何反应。我在Logcat中看到的唯一与此相关的错误是

03-24 01:35:16.562 5300-5300/com.google.android.packageinstaller E/InstallStart: Requesting uid 10079 needs to declare permission android.permission.REQUEST_INSTALL_PACKAGES

考虑到这一点,我的理解是这个权限适用于系统应用程序,因此将其添加到Manifest并不好。我的代码或权限中是否缺少某些内容?我已将提供程序添加到清单,并将provider_paths.xml文件添加到项目中。谢谢你的帮助。

0 个答案:

没有答案