Android编程实战--安全卫士(1)

本文详细介绍了Android编程实战中安全卫士的实现,涵盖了代码组织结构、PackageManager获取应用信息、网络数据获取与XML解析、Handler消息机制、主界面及设置界面的设计与自定义组件的实现。
摘要由CSDN通过智能技术生成

一. 代码组织结构. 两种方式.


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());
					}
				
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值