/**
* 得到应用程序的版本号
*/
<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