Android应用程序自动启动如果存在APK,则删除



我尝试(没有成功)以从自定义Java应用程序安装(通过ADB)的大型APK更新,尽管Stackoverflow得到了帮助,并且几个实验似乎总是失败(请参阅Java应用程序以在Android上安装APK)。

它安装在其上的应用程序和设备仅是离线的,并且不发布在市场上。

我决定尝试解决相同问题的不同途径;我可以将apk从java应用推到/sdcard/myapp/updates/update.apk

我希望用户运行myApp IT以检查update.apk的存在,并且如果在场时,将运行更新到myApp。更新完成后,我希望evate.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);
    }

安迪

您采用的方法很好,效果很好。您需要了解,您现有的应用程序将被关闭(杀死)以执行更新。用户需要手动返回您的应用程序。

为了删除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
    }

相关内容

  • 没有找到相关文章

最新更新