Android Packageinstaller не устанавливает APK в режиме владельца устройства - PullRequest
0 голосов
/ 22 апреля 2020

Я сделал приложение в режиме владельца устройства и хочу обновить приложение с помощью менеджера пакетов. Но когда я запускаю код, он не возвращает никаких исключений, но не обновляет apk. Я все еще вижу мой старый APK. Функция обновления не работает на Android 10. Чего мне не хватает в моем коде?

  @Override
        public void run() {
            try {
                FTPClient ftpClient = new FTPClient();
                ftpClient.connect("10.0.0.22");
                ftpClient.login("User", "1234");
                ftpClient.enterLocalPassiveMode();
                String remoteFile1 = "/app-release.apk";
                String downPath = context.getCacheDir().getAbsolutePath();
                File myapk = new File(downPath + "/app-release.apk");
                OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(myapk));
                boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
                System.out.println(success);
                outputStream1.close();
                myapk.setReadable(true, false);
                if (!success) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                    return;
                } else {
                    InputStream in = null;
                    in = new FileInputStream(myapk);
                    installPackage(context,in,"com.app.example");
                }
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("IO", "IO" + e);

            }
        }



        public static boolean installPackage(Context context, InputStream in, String packageName)
                {
                    try{
            PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
            PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
                    PackageInstaller.SessionParams.MODE_FULL_INSTALL);
            params.setAppPackageName(packageName);
            // set params
            int sessionId = packageInstaller.createSession(params);
            PackageInstaller.Session session = packageInstaller.openSession(sessionId);
            OutputStream out = session.openWrite("example", 0, -1);
            byte[] buffer = new byte[65536];
            int c;
            while ((c = in.read(buffer)) != -1) {
                out.write(buffer, 0, c);
            }
            session.fsync(out);
            in.close();
            out.close();
            session.commit(createIntentSender(context, sessionId));
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("IO", "IO" + e);

                    }
                    return true;
                    }


        private static IntentSender createIntentSender(Context context, int sessionId) {
            PendingIntent pendingIntent = PendingIntent.getBroadcast(
                    context,
                    sessionId,
                    new Intent(ACTION_INSTALL_COMPLETE),
                    0);
            return pendingIntent.getIntentSender();
        }
...