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

前言:

在我们发布我们的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 {

	@Override
	protected 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() {
						@Override
						public 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() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							//做一些清理工作
						}
					})
					.setIcon(R.drawable.ic_launcher);	//标题icon
			
				alert.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;
	//通知栏跳转Intent
	private Intent updateIntent = null;
	private PendingIntent updatePendingIntent = null;

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	@Override
	public void onCreate() {
		super.onCreate();
	}
	@Override
	public 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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值