`
jaymsimusic
  • 浏览: 94352 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

版本检测及更新

阅读更多
使得应用可通过后台自动检查是否有最新版本,如果需要更新当前版本,将弹出对话框让用户选择是否在当前通过Market来更新软件。

Knowledge Points:

SharedPreferences: 一个轻量级的存储方法,类似于经常使用的.ini文件,它也是通过检索关键字来取得相应的数值。之所以是成为轻量级,是因为它所能应用的数值类型有限,对于存储较大数值,效率相对较低。
System.currentTimeMillis:将当前时间以毫秒作为单位来表示,用于比较两个时间的先后顺序。(其数值表示从1970-01-01 00:00:00直到当前时间的总毫秒数)
通过网络来读取信息:在checkUpdate()方法中包含了通过制定的URL来读取网络资源。具体操作步骤,请参考源代码。
Runnable: 在其内部的Run()方法中实现所要执行的任何代码,当这个runnable interface被调用后可以视作为新的线程。
public class Test extends Activity {
    private Handler mHandler;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.front);
        mHandler = new Handler();

        /* Get Last Update Time from Preferences */
        SharedPreferences prefs = getPreferences(0);
        lastUpdateTime =  prefs.getLong("lastUpdateTime", System.currentTimeMillis());

        /* Should Activity Check for Updates Now? */
        if ((lastUpdateTime + (24 * 60 * 60 * 1000)) < System.currentTimeMillis()) {

            /* Save current timestamp for next Check*/
            lastUpdateTime = System.currentTimeMillis();
            SharedPreferences.Editor editor = getPreferences(0).edit();
            editor.putLong("lastUpdateTime", lastUpdateTime);
            editor.commit();       

            /* Start Update */
            checkUpdate.start();
        }
    }
    /* This Thread checks for Updates in the Background */
    private Thread checkUpdate = new Thread() {
        public void run() {
            try {
                URL updateURL = new URL("http://my.company.com/update");
                URLConnection conn = updateURL.openConnection();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                ByteArrayBuffer baf = new ByteArrayBuffer(50);

                int current = 0;
                while((current = bis.read()) != -1){
                     baf.append((byte)current);
                }

                /* Convert the Bytes read to a String. */
                final String s = new String(baf.toByteArray());        

                /* Get current Version Number */
                int curVersion = getPackageManager().getPackageInfo("your.app.id", 0).versionCode;
                int newVersion = Integer.valueOf(s);

                /* Is a higher version than the current already out? */
                if (newVersion > curVersion) {
                    /* Post a Handler for the UI to pick up and open the Dialog */
                    mHandler.post(showUpdate);
                }
            } catch (Exception e) {
            }
        }
    };

    /* This Runnable creates a Dialog and asks the user to open the Market */
    private Runnable showUpdate = new Runnable(){
           public void run(){
            new AlertDialog.Builder(Test.this)
            .setIcon(R.drawable.icon)
            .setTitle("Update Available")
            .setMessage("An update for is available!nnOpen Android Market and see the details?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                            /* User clicked OK so do some stuff */
                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));
                            startActivity(intent);
                    }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                            /* User clicked Cancel */
                    }
            })
            .show();
           }
    };
}

分为三个部分:

1.置于onCreate()方法中的程序用于判断当前时间是否需要检查更新(如果距离上次更新时间大于1天,将启动检查更新)
2.当以上条件满足时,启动checkUpdate来检查当前程序是否为最新版本。
3.如果确定版本已过期,那么将登录market,并直接指向当前程序页面。
分享到:
评论

相关推荐

    WPF自动检测更新版本

    标题“WPF自动检测更新版本”和描述所提及的内容,主要涉及如何在WPF客户端应用中设计并实现这样一个系统。下面将详细介绍这个过程及其相关知识点。 一、版本管理 1. 版本号:每个软件发行版都有一个唯一的版本号,...

    检测系统的版本更新

    接下来,"UpdateSoftDemo"可能是一个示例程序,用于演示如何实现版本检测和更新功能。在JavaApk源码中,我们可以期待看到如何创建HTTP请求、解析响应内容(可能是XML或JSON)、比较版本号、提示用户更新以及下载和...

    android app版本自动检测、更新

    2. **在应用中集成版本检测**: 开发者通常会在应用启动时或特定操作后,通过网络请求检查服务器上的最新版本信息。这可以通过API接口实现,返回的数据应包含当前可用的版本代码和版本名称。 3. **网络请求与数据...

    版本检查更新(ios)

    在iOS开发中,版本检查更新是一项重要的功能,它允许应用自动检测是否有新的版本可用,并提示用户进行升级。这项功能不仅可以确保用户始终使用最新、最安全的软件版本,还能提高产品的用户体验,因为开发者可以及时...

    Swift-App版本管理包括版本检测和强制更新

    这种方式需要在应用内提供一个方便的入口点,如设置界面,以便用户随时检查更新。 总的来说,Swift中的App版本管理涉及网络请求、数据解析、本地存储和用户交互等多个方面。通过以上步骤,开发者可以有效地实现版本...

    检测app版本

    - 开发者可以根据业务需求设定更新策略,比如:仅在WiFi环境下检查更新,避免消耗用户流量。 - 可以设置定期检查,如每天或每周一次,或者在应用启动时检查。 7. **离线更新**: - 对于无法连接网络的用户,可以...

    android检测版本更新

    android是当今移动互联网最受欢迎的一门编程语言,互联网移动产品愈来愈多,版本更新成为一个必不可少的环节,本资源提供一个jar包来读取apk的配置文件来检测版本更新。

    Android项目版本检测自动更新.rar

    1. **版本检测**:在Android应用中,通常会在启动时或者在后台定期检查服务器上的最新版本信息。这可以通过发送HTTP请求到服务器上的API来完成,API返回当前应用商店中的最新版本号、更新日志和下载链接。在客户端,...

    易语言利用QQ空间检测版本更新

    "易语言利用QQ空间检测版本更新"这个主题涉及到了几个关键知识点,包括易语言编程、网络通信、版本检测机制以及数据解析。 首先,易语言是一种基于中文的编程语言,它的设计目标是降低编程难度,使得更多的人可以...

    Equinox p2 RCP版本检测,更新

    - **更新策略**:决定何时检查更新,是否强制用户立即更新,以及如何处理更新失败的情况。 - **用户体验**:设计友好的更新提示和进度反馈,确保用户能清晰了解更新状态。 在压缩包文件"Equinox p2"中,可能包含...

    自动检测版本更新及自动安装

    3. 客户端检测:在客户端软件中,内置的更新检查机制会定期向更新服务器发送请求,获取当前安装版本与服务器上最新版本的信息。这个过程可能通过HTTP GET请求实现,请求参数包括当前版本号。 4. 比较与通知:客户端...

    版本检测自动更新.zip

    自动更新通常包含以下几个步骤:检查更新、下载更新、验证更新文件的完整性和安全性,以及在用户同意或在后台静默执行时安装更新。 在"资料整理"这个子文件中,可能包含了如何实现这些功能的文档、代码示例或者教程...

    APP版本检测更新

    在移动应用开发中,"APP版本检测更新"是一项至关重要的功能,它确保用户始终能够使用最新、最安全的软件版本。这项功能通常包括以下几个关键部分: 1. **版本检测**:应用程序启动时或在特定时间间隔内,通过HTTP...

    Android检测版本更新

    本文将深入探讨如何在Android中实现版本检测更新的机制。 首先,我们需要理解版本更新的基本流程:检查服务器上的最新版本信息,对比本地应用的版本号,如果存在新版本,提示用户进行更新。这一过程主要涉及网络...

    Android应用源码版本检测自动更新.zip

    - `Preference`或`SharedPreferences`存储用户的更新选择(如是否自动检查更新)。 6. **测试与调试**: - 模拟不同网络环境(如慢速网络、断网、网络波动)来测试更新逻辑的健壮性。 - 使用模拟器或真机进行多...

    自动检测更新功能后下载更新

    - **检测**:应用程序启动时或者在设定的时间间隔内,通过网络请求检查服务器上的版本信息,这通常涉及到对比当前版本号和服务器上提供的最新版本号。 - **下载**:如果发现新版本,应用会在后台下载更新包,通常...

    Android版本更新(检测、升级),检测版本,通过apk路径下载安装包

    在`MyVersionUpdate`这个文件夹中,可能包含了实现这些功能的Java类或者XML布局文件,比如一个`VersionCheckService`用于版本检测,一个`DownloadManager`负责下载更新,以及`UpdateDialog`用于展示更新信息和进度条...

Global site tag (gtag.js) - Google Analytics