我们正在编写一个Android应用程序,在大屏幕上显示广告。 我们有一个后端,广告商可以选择广告,因此它们几乎可以即时更新。 由于将有许多运行的Android盒子(插入HDMI屏幕),我们应该能够远程更新我们的软件。
情况如下:
主应用程序持续运行(除非关闭),用户永远不会看到任何与Android相关的内容。 我们需要一个更新器应用程序来监听更新并删除主apk,安装新apk。 在更新期间,我们将显示一个活动界面,上面写着“正在更新,请等待”,直到新的主apk安装并显示出来。
我们需要什么:
我们需要帮助实现更新机制,而不会在已ROOT的设备上提示用户。
我们拥有什么:
更新器应用程序被挂接到启动接收事件中,其中一个服务开始运行(这个服务很快将由同事实现以监听更新)。 该服务可以启动一个活动界面,提示更新信息,同时进行更新。
在更新器活动界面中:
try {
Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"});
stringBuilder.append(String.valueOf(proc.waitFor()));
stringBuilder.append("\n");
} catch (Exception e) {
if (e instanceof IOException) {
Log.d(TAG, "IOException");
} else if (e instanceof InterruptedException) {
Log.d(TAG, "InterruptedException");
} else {
e.printStackTrace();
}
}
StringBuilder打印11,但如果我给出随机不存在的命令,它也会打印11。
在清单文件中
<!-- Permission to start UpdaterService on boot -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Install/delete permissions, only granted to system apps -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果我不将我的应用程序安装为系统应用程序,那么安装包和删除包都是无用的,这样说对吗?
长话短说,我没有安装我的测试APK,也不知道如何解决这个问题。任何帮助将不胜感激!