19

我可以通过此处提到的 NFC 制作我的应用程序,即设备所有者应用程序。现在我想通过无线方式更新我的应用程序,但我找不到没有 root的方法。

谷歌为企业提供了许多开发应用程序的选项,如此处所述但没有提供通过 OTA 更新应用程序的方法。

寻找解决方案。

4

4 回答 4

4

这只是纯粹的猜测,因为我自己从未尝试过使用包安装程序 API:

您可以尝试为您的设备所有者应用程序设置安装程序包(使用PackageManager.setInstallerPackageName())。此安装程序包需要是使用与设备所有者 APK 相同的证书签名的单独 APK。

getPackageManager().setInstallerPackage("<device.owner.package.name>", "<installer.package.name>");

从您的安装程序 APK 中,您可以使用它PackageInstaller来准备更新:

PackageInstaller pi = getPackageManager().getPackageInstaller();
int sessId = pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));
PackageInstaller.Session session = pi.openSession(sessId);
OutputStream out = session.openWrite("app");
// .. write updated APK file to out
session.fsync(out);
session.commit(...);
session.close();

我不确定这是否会以静默方式安装您的更新(或者这是否完全符合我的预期)。

于 2015-07-03T10:26:28.997 回答
1

创建服务以进行背景检查以进行更新。如果更新可用下载 apk 文件并将其写入 sdcard 之类的地方。等待几秒钟以完全刷新。然后调用以下代码来安装您的新 apk。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);

fileName是您在 sd 卡上的新 apk 文件的路径。

于 2015-07-02T19:25:31.567 回答
1

您可以使用 Play 商店为您的应用提供更新:

  1. 就像您已经做的那样,通过 NFC 配置设备所有者应用程序。

  2. 在 Play 商店中提供您的设备所有者应用程序的更新版本(相同的包名称、相同的签名、更高的版本号)。

  3. 在您设备上的 Play 商店应用程序中,搜索您的应用程序的 Play 商店版本并安装更新。

  4. 在 Play 商店中为您的设备所有者应用程序激活自动更新(在应用程序的 Play 商店页面上,单击菜单(三个点)并激活自动更新复选框。

这对于配置阶段来说是相当大的努力,但设备应该会自动接收未来的更新。

于 2015-07-03T07:33:51.227 回答
0

我猜您可能想成为 EMM/MDM 合作伙伴应用程序 - 它类似于设备所有者应用程序,但具有增强的权限和 API。通常,三星/HTC 等 OEM 为 MDM 合作伙伴应用程序提供隐藏的 API 以升级应用程序。我不确定 Android for Work 是否也提供此 API。

例如:OEM 提供了一个名为 updatePackage(String packageName) 的 API,设备上的 MDM 客户端可以使用该 API 来更新包。您也可以使用此 API 来更新 Device Owner App。

于 2015-07-06T19:45:41.720 回答