这个问题可能早有人问过,但没有得到任何明确的答案。我基本上不希望和客户端交互更新和其他东西,他们所能看到的只是应用程序正在运行并且他们很高兴。但为此,我需要一些后台线程或检查市场是否有新更新并在后面更新它并在应用更新后重新启动应用程序的东西。
PS我对android开发完全陌生,如果我听起来很疯狂,真的很抱歉,但这是我的要求
这个问题可能早有人问过,但没有得到任何明确的答案。我基本上不希望和客户端交互更新和其他东西,他们所能看到的只是应用程序正在运行并且他们很高兴。但为此,我需要一些后台线程或检查市场是否有新更新并在后面更新它并在应用更新后重新启动应用程序的东西。
PS我对android开发完全陌生,如果我听起来很疯狂,真的很抱歉,但这是我的要求
您无法在没有用户交互的情况下更新(或安装)应用程序,除非
此外,没有可用于检查 Google Play 商店中可用应用程序版本的官方 API。
您可以通过跟踪 Google Play 之外的当前版本,然后通过启动市场链接提示更新用户来实现您正在尝试做的一些事情。如果您从辅助应用程序执行此操作,您甚至可以等待更新完成,然后重新启动该应用程序。
在实践中,您不能在没有用户交互的情况下进行静默安装/更新,这是一件好事(tm),因为前几位评论者已经说明了原因。
AFAIK,如果你有 root 访问权限是可能的,过程如下:
/system/app
文件夹中(作为系统应用)您需要以下权限:
android.permission.INSTALL_PACKAGES
android.permission.DELETE_PACKAGES
android.permission.CLEAR_APP_CACHE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
您的应用必须使用系统签名进行签名
java -jar signapk.jar platform.x509.pem platform.pk8 helloworld.apk hello.apk
检查后台线程中的更新并将更新的 .apk 文件下载到临时位置,例如apk_path
以编程方式执行pm install apk_path
命令,下面是一个片段:
public String silentInstallation(String apkPath)
{
String[] args = { "pm", "install", "-r", apkPath };
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
baos.write('\n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
return result;
}
希望能帮助到你。