android - 自助服务终端应用程序更新和重启
问题描述
我在 Android 7 或 9 上有一个自助服务终端应用程序,它是带有固定屏幕的设备所有者。我下载了新版本的应用程序 (.apk) 并在我的信息亭应用程序中使用 PackageInstaller 安装它:
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));
这将关闭我当前正在运行的信息亭应用程序。当我再次手动运行它时,我可以看到它已更新。但是,我不希望我的信息亭应用程序被关闭,它必须在安装更新的 apk 时自动重新启动。安装更新后如何重新启动我的自助服务终端应用程序?
我已经尝试过广播 MY_PACKAGE_REPLACED、PACKAGE_REMOVED、PACKAGE_ADDED、PACKAGE_REPLACED,但我的信息亭应用程序从未在其 BroadcastReceiver 中接收到它们。
解决方案
该问题是由联想平板电脑引起的。您必须为您的应用启用应用 -> 设置 -> 后台应用刷新。否则 ACTION_MY_PACKAGE_REPLACED 不起作用。更多信息:https ://forums.lenovo.com/t5/Lenovo-Android-based-Tablets-and/Tab-4-7-Essentials-autostart-disabled/mp/3840211
推荐阅读
- python - 如何在for循环中删除列表的元素
- python - 获取html表内元素的href
- python - 尝试在 Python 中进行线性回归,但由于某种原因,列数据类型设置为字符串
- c++ - 错误:在继承中使用已删除的函数
- c# - 将文本发送到外部文本框
- r - 找到R中数字总和恰好为70的概率?
- javascript - 在 React Native 中向父级传递值
- amazon-web-services - 如何使用 AWS Step Functions 将失败任务的输入和错误传递给回退任务?
- python-3.6 - 特定范围内的 n 个数字的总和
- vb.net - 带通配符的 IndexOf