动态获取程序的版本名称的方法以及dialog的简单用法以及两种上下文的区别

/**

 * 得到应用程序的版本号

 */

<span style="font-size:18px;">public String getAppVersion(){

PackageManager pm = getPackageManager();

try {

PackageInfo info = pm.getPackageInfo(getPackageName(), 0);

return info.versionName;

} catch (NameNotFoundException e) {

e.printStackTrace();

//不可能发生;

return "";

}

}</span>

/**
	 * 解析json处理服务器返回的数据
	 * 
	 * @param result
	 */
	protected void prcessData(String result) {
		try {
			// 初始化一个对象
			JSONObject obj = new JSONObject(result);
			// 获取到服务器下载的apk地址

			mDownloadUrl = obj.getString("downloadurl");
			// 获取到服务器返回的版本号
			int netVersion = obj.getInt("version");
			// 获取到服务器返回的描述信息

			mDesc = obj.getString("desc");

			System.out.println("-----------------------------");

			System.out.println("版本号:" + netVersion);
			System.out.println("描述信息:" + mDesc);
			System.out.println("apk地址:" + mDownloadUrl);
			// 如果本地的版本号和服务器返回的版本号一样。那么就不需要升级
			if (mLocalVersionCode == netVersion) {
				// 不需要升级
				System.out.println("不需要升级");
				// 进入到主界面
				loadMainUI();
			} else {
				// 需要升级
				System.out.println("需要升级");

				showDialog();
			}

		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
/**
	 * 初始化数据
	 */
	private void initData() {

		try {
			// // 获取到包的管理者
			// mPackageManager = getPackageManager();
			// // 获取到包的基本信息
			// 第一个参数:表示包名
			// 第二个参数:表示标记0表示所有的标记
			// PackageInfo mPackageInfo = mPackageManager.getPackageInfo(
			// getPackageName(), 0);
			// //获取到版本号
			//
			// mVersionName = mPackageInfo.versionName;
			// 获取到当前的apk
			// 获取到本地的版本号

			mLocalVersionName = PackageUtils.getPackageVersionName(this);

			mLocalVersionCode = PackageUtils.getPackageVersionCode(this);

			// 设置版本号
			mTvSplashVersion.setText("版本号:" + mLocalVersionName);

			// 获取到网络版本号
			boolean update_itemValue = SharedPreferencesUtils.getBoolean(this, "update_item", false);
			if (update_itemValue) {
				// 开始更新流程
				Toast.makeText(getBaseContext(), "开始自动更新", 0).show();
				checkVersion();
			} else {
				// 自动更新关闭  //2000
				new Thread(){
					public void run() {
						try {
							Thread.sleep(2000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						loadMainUI();
					};
				}.start();
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
延迟2秒进入主页面

ong startTime = System.currentTimeMillis();
   long endTime = System.currentTimeMillis();
					long dTime = endTime - startTime;
					if(dTime<2000){
						try {
							Thread.sleep(2000-dTime);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}

/停留2秒后进入主页面;
			handler.postDelayed(new Runnable() {
				
				@Override
				public void run() {
					enterHome();
				}
			}, 2000);




简单dialog用法

<pre name="code" class="java"><span style="font-size:18px;">/**
	 * 展示升级的对话框
	 */
	private void showDialog() {
		// this:表示当前对象,activity对话框必须依附activity才能存在
		// getApplicationContext()表示全局的
		// 初始化对话框
		AlertDialog.Builder builder = new AlertDialog.Builder(this);

		// 设置对话框的标题
		builder.setTitle("提示");
		// 设置描述信息
		builder.setMessage(mDesc);
		// 对话框取消的监听
		builder.setOnCancelListener(new OnCancelListener() {

			@Override
			public void onCancel(DialogInterface dialog) {
				loadMainUI();

			}
		});

		// 设置取消对话框
		builder.setNegativeButton("取消", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				System.out.println("不升级");
				// 取消对话框
				mDialog.dismiss();
				loadMainUI();
			}
		});
		// 确定升级
		builder.setPositiveButton("升级", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

				System.out.println("升级");
				// 下载apk
				downLoadApk(mDownloadUrl);

				mDialog.dismiss();
			}
		});

		// 展示对话框

		mDialog = builder.show();

	}</span>


 



两种上下文的区别

  对话框是Activity的一部分。

  对话框是挂载在Activity上面的 。

  如果Activity不存在,对话框就不能被创建。

 

  Activity 实际上是应用程序context上下文的一个子集。

 

  子类有的东西父类不一定有

  父类有的东西子类一定有

 

  getApplicationContext();生命周期长,只要应用还存活它就存在;

  this 生命周期短,只要Activity不存在了,系统就会回收;  

 

  其中:getBaseContext(),getApplication(),getApplicationContext();

  都不能放在AlertDialog做上下文;

 

  getApplicationContext() 使用场景是比如频繁需要操作的数据库

 

  推荐用法:Activity.this



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值