【问题标题】:Update a device owner managed android app silently (in kiosk mode)以静默方式更新设备所有者管理的 android 应用(在 kiosk 模式下)
【发布时间】:2018-04-23 18:14:57
【问题描述】:

我创建了一个设备所有者应用。它可以将已安装的应用程序转换为 Kiosk 模式,我正在尝试远程更新 kiosk 应用程序,而不是从 Playstore,但它没有得到更新。任何人都可以帮我一些指示吗?

【问题讨论】:

  • 您要在 Play 上更新的应用吗?如果是,您将需要使用 Google 的 API 之一来管理更新。 Android Management API 允许设置一个SystemUpdate 窗口来控制应用和系统更新的时间。
  • @Fred,感谢您的回复,但我想远程更新它。
  • 创建您自己的服务器并在此处添加您的 apk,而不是从您的服务器下载 apk 并使用 adb 命令安装,但它需要 root 设备。
  • Android Management API 允许您远程执行所有操作,它是一个云 API。
  • @UpendraShah,不,设备未植根。

标签: android kiosk-mode device-policy-manager


【解决方案1】:

您必须在您的服务器上托管您的 apk,然后根据您指定的任何条件下载它。然后,您可以使用此代码更新您的应用。

public static boolean InstallAPK(Context context, String apk_file_name) {
        try {

            File apkfile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + apk_file_name);
            if (apkfile.exists()) {

                FileInputStream in = new FileInputStream(apkfile);

                PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
                PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
                        PackageInstaller.SessionParams.MODE_FULL_INSTALL);
                params.setAppPackageName(context.getPackageName());
                // set params
                int sessionId = packageInstaller.createSession(params);
                PackageInstaller.Session session = packageInstaller.openSession(sessionId);
                OutputStream out = session.openWrite("COSU", 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));
                return true;
            } else
                return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

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

【讨论】:

  • 什么是 createIntentSender ?
  • 我试过那个代码它没有显示任何错误,它返回true但没有安装apk?
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2020-05-20
  • 2011-08-09
  • 2017-04-14
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多