一. 代码组织结构. 两种方式.
1. 按照业务逻辑 组织代码.
会议 com.swust.metting
财务 com.swust.money
人员管理 com.swust.manage
2. 按照代码的类型组织包结构.
界面 com.swust.mobilesafe.activities
自定义控件 com.swust.mobilesafe.ui
业务逻辑 com.swust.mobilesafe.engine
工具类 .utils
服务 .service
广播接受者 .receiver
持久化 .db
3.界面效果
二.PackageManager 获取应用程序的清单文件的信息
/**
* 获取应用程序的版本号
*
* @return
*/
private String getVersion() {
PackageManager pm = getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
return packageInfo.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
三.使用URL HttpUrlConntion 获取网络信息,通过pull解析器 解析XML
1.线程类run方法
private class CheckVersionTask implements Runnable {
private Message msg = Message.obtain();
private long startTime = System.currentTimeMillis();
@Override
public void run() {
// TODO Auto-generated method stub
try {
URL url = new URL(getResources().getString(R.string.path));
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if (code == 200) {
InputStream in = conn.getInputStream();
updateinfo = UpdateInfoPaser.getUpdateInfo(in);
if (updateinfo == null) {
msg.what = PASER_ERROR;
} else {
msg.what = PASER_SUCCESS;
}
} else {
msg.what = SERVER_ERROR;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
msg.what = URL_ERROR;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
msg.what = IO_ERROR;
} finally {
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();
}
}
handler.sendMessage(msg);
}
}
}
2.创建业务逻辑类来解析xml
public class UpdateInfoPaser {
/**
* 解析更新的xml
*
* @param in
* xml 文件流
* @return
*/
public static UpdateInfo getUpdateInfo(InputStream in) {
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(in, "UTF-8");
int type = parser.getEventType();
UpdateInfo info = new UpdateInfo();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("version".equals(parser.getName())) {
info.setVersion(parser.nextText());
} else if ("description".equals(parser.getName())) {
info.setDescription(parser.nextText());
} else if ("path".equals(parser.getName())) {
info.setApkPath(parser.nextText());
}