我已经尝试(没有成功)从自定义Java应用程序获取我的大型apk更新(通过adb),尽管stackoverflow的帮助和几个实验路由总是似乎失败(请参阅Java Application to install APK on android)
它安装的应用程序和设备只能离线,不会发布到市场。
我决定尝试不同的途径来解决同样的问题;我可以将apk从java应用程序推送到/sdcard/MyApp/updates/update.apk
我想当用户运行myapp时检查update.apk是否存在,如果存在则运行更新到myapp。更新完成后,我希望删除update.apk(以防止每次应用程序启动时更新循环)。我是android的新手,我不确定如何实现上述行为。
我的代码是非常稀疏的“功能块”,但下面包含了我想的内容:
if (update.exists()) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/MyApp/updates" + "updates.apk")), "application/vnd.android.package-archive");
startActivity(intent);
}
//add a delete to update.apk here AFTER it has finished installing
}
我的问题是:
是否有更好的方法来实现上述所需功能? 如何在删除之前确定update.apk已安装并正常工作?
感谢您的帮助,正如我所提到的,我是Java和Android的新手,并试图通过战斗。
编辑:我正在使用的最终解决方案:
if (updateTxt.exists()) {
try {
BufferedReader br = new BufferedReader(
new FileReader(updateTxt));
String line;
while ((line = br.readLine()) != null) {
String line2[] = line.split(" "); // split the string to get
// the
// progress
myUpdateVersion = Integer.parseInt(line2[0]); // [0] is the
// value we
// are
// interested
// in
// so set
// it.
}
} catch (IOException ex) {
return;
}
} else {
// no update so do nothing
}
if (updateApk.exists()) {
// updateIntent();
// now check the version of the update file to see if it can be
// deleted
PackageManager packageManager = getPackageManager();
PackageInfo apkPackageInfo = packageManager.getPackageInfo(
"com.myapp.myapp", 0);
if (apkPackageInfo != null) {
if (apkPackageInfo.versionCode == myUpdateVersion) {
// Update has been installed. Delete update APK
updateApk.delete();
} else {
// Update needs to be installed
updateIntent();
}
} else {
// no update so do nothing
}
}
} // end updateApk
public void updateIntent() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
Uri.fromFile(new File(Environment.getExternalStorageDirectory()
+ "/updates/update.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
}
安迪
答案 0 :(得分:1)
你采取的方法很好,而且运作良好。您需要了解您的现有应用程序将被关闭(终止)以执行更新。用户需要手动返回您的应用程序。
为了删除APK以避免无限循环,您需要知道更新的版本号。如果您知道(也许您将其作为文件名的一部分或其他方式),您可以将其与正在运行的应用程序版本进行比较。如果它们相同,则可以确保已安装更新,并且可以删除更新APK。
要确定正在运行的版本,您可以使用以下命令:
PackageManager packageManager = getPackageManager();
PackageInfo apkPackageInfo = packageManager.getPackageInfo("your.package.name", 0);
if (apkPackageInfo != null) {
if (apkPackageInfo.versionCode == myUpdateVersion) {
// Update has been installed. Delete update APK
} else {
// Update needs to be installed
}