提示用户进行版本更新并且发布通知监控版本下载情况

来源:互联网 发布:电脑程序员工资多少 编辑:程序博客网 时间:2024/06/14 02:12

前言:

在我们发布我们的APP之后避免不了升级和加入一些新的功能,一般都是进入软件之后进行检测并且发布通知去下载。当然在更新问题上也要注意用相同的key进行打包。然后优化,好了,下面我们来看它的实现方法


实现效果截图:



首先上一段代码,查看MainActivity的相关处理:

import com.jay.verioncheck.VersionConfig;import com.jay.versionService.VersionService;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager.NameNotFoundException;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initVersionGlobal();//初始化本地版本和服务器版本checkVersion();//检查版本,发布通知更新}//初始化版本信息,赋值给版本配置public void initVersionGlobal(){try {//获取本地软件版本号VersionConfig.localVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionCode;//获取服务器版本号VersionConfig.serverVersion = 2;} catch (NameNotFoundException e) {e.printStackTrace();}}//检查版本更新public void checkVersion(){//判断本地版本和服务器版本进行比较if(VersionConfig.localVersion < VersionConfig.serverVersion){//有更新的情况,声明提示对话框AlertDialog.Builder alert = new AlertDialog.Builder(this);alert.setTitle("升级").setMessage("发现新版本,建议立即更新使用").setPositiveButton("更新", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//发送请求到下载服务Intent intent = new Intent();intent.setClass(MainActivity.this, VersionService.class);intent.putExtra("titleId", R.string.app_name);startService(intent);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//做一些清理工作}}).setIcon(R.drawable.ic_launcher);//标题iconalert.create().show();//显示该对话框}else{//没有更新的情况}}}

版本控制类:

/*** * 本地版本号控制类 * @author zhanglei * */public class VersionConfig {public static int localVersion = 1;public static int serverVersion = 2;public static String downloadDir = "/downloaddir/";}

VersionService下载服务代码:

import java.io.File;import com.jay.verioncheck.VersionConfig;import com.jay.versionActivity.MainActivity;import com.jay.versionActivity.R;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.app.Service;import android.content.Intent;import android.os.Environment;import android.os.IBinder;/*** * 定义一个下载服务 * @author zhanglei * */public class VersionService extends Service{private int titleId;private File updateDir = null;private File updateFile = null;//通知栏private NotificationManager updateNotificationManager = null;private Notification updateNotification = null;//通知栏跳转Intentprivate Intent updateIntent = null;private PendingIntent updatePendingIntent = null;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();}@Overridepublic void onStart(Intent intent, int startId) {titleId = intent.getIntExtra("titleId", 0);/*** * 1、android.os.Environment.MEDIA_MOUNTED标记安装的状态 * 2、android.os.Environment.getExternalStorageState() 得到当前软件的状态 */if(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState())){//通过当前运行环境得到的目录+配置的下载目录配置成过度文件的路径updateDir = new File(Environment.getExternalStorageDirectory(), VersionConfig.downloadDir);updateFile = new File(updateDir.getPath(), getResources().getResourceName(titleId));}//得到通知管理器,并且赋值通知对象this.updateNotificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);this.updateNotification = new Notification();    //设置下载过程中,点击通知栏,回到主界面    updateIntent = new Intent(this, MainActivity.class);    updatePendingIntent = PendingIntent.getActivity(this,0,updateIntent,0);//配置通知内容updateNotification.tickerText = "开始下载";updateNotification.icon = R.drawable.ic_launcher;updateNotification.setLatestEventInfo(this, "下载测试", "0%", updatePendingIntent);//发布通知updateNotificationManager.notify(0, updateNotification);super.onStart(intent, startId);}}

注册下载service:

<!-- 手动注册一个service -->        <service             android:name="com.jay.versionService.VersionService"            android:enabled="true"            >        </service>

说明:

目前本博客只实现了发布通知。由于暂时没有服务器地址并没有做实时更新的下载监控

 

实现思路:

    代码的可读性很高,注释很多,在此不在多做解释,本实现是app运行之后在Activity之后。在onCreate方法中,拿到本地版本和服务器版本后进行比较。得到是否有更新,如果有就提示对话框进行更新。如果用户更新就发布通知进行更新


源码下载地址:

http://pan.baidu.com/share/link?shareid=456005&uk=1997312776




原创粉丝点击