編輯:關於android開發
本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,轉載請注明源地址。
解析json的代碼很簡單
JSONObject jsonObject = new JSONObject(json);
//debug調試,解決問題
String versionName = jsonObject.getString("versionName");
mVersionDes = jsonObject.getString("versionDes");
String versionCode = jsonObject.getString("versionCode");
mDownloadUrl = jsonObject.getString("downloadUrl");
// 日志打印
Log.i(tag, versionName);
Log.i(tag, mVersionDes);
Log.i(tag, versionCode);
Log.i(tag, mDownloadUrl);
在獲取服務器端json數據後,得到app的版本號,通過和客戶端的版本號進行對比
//比對版本號(服務器版本號>本地版本號,提示用戶更新)
if(mLocalVersionCode < Integer.parseInt(versionCode)) {
//提示用戶更新,彈出對話框(UI),消息機制
msg.what = UPDATE_VERSION;
} else {
//進入應用程序主界面
msg.what = ENTER_HOME;
}
可以使用android的消息機制發送不同類型消息,可以參考《Android消息機制入門》
首先新建Handler
private Handler mHandler = new Handler() {
//
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_VERSION:
//彈出對話框,提示用戶更新
//showUpdateDialog();
break;
case ENTER_HOME:
//進入應用程序主界面,activity跳轉過程
enterHome();
break;
case URL_ERROR:
//ToastUtil.show(getApplicationContext(), "url異常");
enterHome();
break;
case IO_ERROR:
//ToastUtil.show(getApplicationContext(), "讀取異常");
enterHome();
break;
case JSON_ERROR:
//ToastUtil.show(getApplicationContext(), "json解析異常");
enterHome();
break;
default:
break;
}
};
};
在定義一些出現狀態碼和出現異常時候的錯誤碼:
/**
* 更新新版本的狀態碼
*/
protected static final int UPDATE_VERSION = 100;
/**
* 進入應用程序主界面狀態碼
*/
protected static final int ENTER_HOME = 101;
/**
* url地址出錯狀態碼
*/
protected static final int URL_ERROR = 102;
//以下是其他各種出錯狀態碼
protected static final int IO_ERROR = 103;
protected static final int JSON_ERROR = 104;
接著實現enterHome()函數,作用:跳轉到主界面
/**
* 進入應用程序主界面
*/
protected void enterHome() {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
//在開啟一個新的界面後,將導航界面關閉(導航界面只可見一次)
finish();
}
所以順便新建一個HomeActivity.java
public class HomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
當然還有一個activity_home.xml文件,隨便加一點代碼,先看到效果,後期再修改
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:text="HOMEACTIVITY"
android:textSize="20sp"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
運行項目後發現,當沒有版本更新的時候,splash界面停留的時間很短,於是可以將指定睡眠時間,當請求網絡的時長超過4秒則不做處理,請求網絡的時長小於4秒,強制讓其睡眠滿4秒鐘。這樣splash界面會停留一會,然後跳轉到HomeActivity界面
//指定睡眠時間,請求網絡的時長超過4秒則不做處理
//請求網絡的時長小於4秒,強制讓其睡眠滿4秒鐘
long endTime = System.currentTimeMillis();
if(endTime - startTime < 4000) {
try {
Thread.sleep(4000 - (endTime - startTime));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mHandler.sendMessage(msg);
完整的代碼如下:
package com.wuyudong.mobilesafe.activity;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.json.JSONException;
import org.json.JSONObject;
import com.wuyudong.mobilesafe.R;
import com.wuyudong.mobilesafe.Utils.StreamUtil;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import android.widget.TextView;
/**
* @author wuyudong
*
*/
public class SplashActivity extends Activity {
protected static final String tag = "SplashActivity";
/**
* 更新新版本的狀態碼
*/
protected static final int UPDATE_VERSION = 100;
/**
* 進入應用程序主界面狀態碼
*/
protected static final int ENTER_HOME = 101;
/**
* url地址出錯狀態碼
*/
protected static final int URL_ERROR = 102;
//以下是其他各種出錯狀態碼
protected static final int IO_ERROR = 103;
protected static final int JSON_ERROR = 104;
private TextView tv_version_name;
private int mLocalVersionCode;
private String mVersionDes;
private String mDownloadUrl;
private Handler mHandler = new Handler() {
//
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_VERSION:
//彈出對話框,提示用戶更新
//showUpdateDialog();
break;
case ENTER_HOME:
//進入應用程序主界面,activity跳轉過程
enterHome();
break;
case URL_ERROR:
//ToastUtil.show(getApplicationContext(), "url異常");
enterHome();
break;
case IO_ERROR:
//ToastUtil.show(getApplicationContext(), "讀取異常");
enterHome();
break;
case JSON_ERROR:
//ToastUtil.show(getApplicationContext(), "json解析異常");
enterHome();
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉當前actinity的tittle
// requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
// 初始化UI
initUI();
// 初始化數據
initData();
}
/**
* 進入應用程序主界面
*/
protected void enterHome() {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
//在開啟一個新的界面後,將導航界面關閉(導航界面只可見一次)
finish();
}
/**
* 獲取數據方法
*/
private void initData() {
// 1.應用版本名稱
tv_version_name.setText("版本名:" + getVersionName());
// 檢測(本地版本號與服務器版本號比對)是否有更新,如果有更新,提示用戶下載
// 2.獲取本地版本號
mLocalVersionCode = getVersionCode();
// 3,獲取服務器版本號(客戶端發請求,服務端給響應,(json,xml))
// http://www.oxxx.com/update74.json?key=value 返回200 請求成功,流的方式將數據讀取下來
// json中內容包含:
/*
* 更新版本的版本名稱|新版本的描述信息|服務器版本號|新版本apk下載地址
*/
checkVersion();
}
/**
* 檢測版本號
*/
private void checkVersion() {
new Thread() {
public void run() {
// 發送請求獲取數據,參數則為請求json的鏈接地址
// http://192.168.13.99:8080/update.json 測試階段不是最優
// 僅限於模擬器訪問電腦tomcat
Message msg = Message.obtain();
long startTime = System.currentTimeMillis();
try {
// 1,封裝url地址
URL url = new URL("http://169.254.178.87:8080/update.json");
// 2,開啟一個鏈接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 3,設置常見請求參數(請求頭)
// 請求超時
connection.setConnectTimeout(2000);
// 讀取超時
connection.setReadTimeout(2000);
// 默認就是get請求方式
//connection.setRequestMethod("POST");
// 4,獲取請求成功響應碼
if(connection.getResponseCode() == 200) {
// 5,以流的形式,將數據獲取下來
InputStream is = connection.getInputStream();
// 6,將流轉換成字符串(工具類封裝)
String json = StreamUtil.streamToString(is);
// 記得添加權限-->android.permission.INTERNET
Log.i(tag, json);
//7,json解析
JSONObject jsonObject = new JSONObject(json);
//debug調試,解決問題
String versionName = jsonObject.getString("versionName");
mVersionDes = jsonObject.getString("versionDes");
String versionCode = jsonObject.getString("versionCode");
mDownloadUrl = jsonObject.getString("downloadUrl");
// 日志打印
Log.i(tag, versionName);
Log.i(tag, mVersionDes);
Log.i(tag, versionCode);
Log.i(tag, mDownloadUrl);
//8,比對版本號(服務器版本號>本地版本號,提示用戶更新)
if(mLocalVersionCode < Integer.parseInt(versionCode)) {
//提示用戶更新,彈出對話框(UI),消息機制
msg.what = UPDATE_VERSION;
} else {
//進入應用程序主界面
msg.what = ENTER_HOME;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
msg.what = URL_ERROR;
} catch (IOException e) {
e.printStackTrace();
msg.what = IO_ERROR;
} catch (JSONException e) {
e.printStackTrace();
msg.what = JSON_ERROR;
} finally {
//指定睡眠時間,請求網絡的時長超過4秒則不做處理
//請求網絡的時長小於4秒,強制讓其睡眠滿4秒鐘
long endTime = System.currentTimeMillis();
if(endTime - startTime < 4000) {
try {
Thread.sleep(4000 - (endTime - startTime));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mHandler.sendMessage(msg);
}
};
}.start();
}
/**
* 返回版本號的方法
*
* @return 非0代表成功
*/
private int getVersionCode() {
// 1.管理者對象packageManager
PackageManager pm = getPackageManager();
// 2.從包的管理者對象中,獲取指定包名的基本信息(版本名稱,版本號)
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
// 3.獲取版本名稱
return packageInfo.versionCode;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 獲取版本名稱:清單文件中
*
* @return 應用版本名稱 返回null代表有異常
*/
private String getVersionName() {
// 1.管理者對象packageManager
PackageManager pm = getPackageManager();
// 2.從包的管理者對象中,獲取指定包名的基本信息(版本名稱,版本號)
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
// 3.獲取版本名稱
return packageInfo.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 初始化UI方法 alt+shift+j
*/
private void initUI() {
tv_version_name = (TextView) findViewById(R.id.tv_version_name);
}
}
Android安全專項-利用androguard分析微信
Android安全專項-利用androguard分析微信 安裝 做 Android 安全測試之前你應該知道的工具 (一) 分析 ./androlyze.py -s進入
Android 手機衛士17--緩存清理,android17--
Android 手機衛士17--緩存清理,android17-- 清理單個應用緩存 通過反射調用方法 需要權限:android.permissi
android:Activity數據傳遞之全局對象(application)
android:Activity數據傳遞之全局對象(application) 在activity之間數據傳遞中還有一種比較實用的方式,就是全局對象applicatio
詳解Android Fragment之一:Fragment概述及用法
Fragment一般是宿主Activity UI的一部分或一種行為,作為Act
Android界面架構(Activity,PhoneWiondow,DecorView)簡介,activitydecorview
Android界面架構(Activity,PhoneWiondow,De