手机安全卫士第一天

时间:2023-02-19 23:42:39

手机安全卫士要实现的功能:手机防盗,通讯卫士,软件管理,进程管理,流量统计,手机杀毒,缓存清理等等常见功能。

今天实现的功能:闪屏SplashActivity页面HomeActivity主页面的建立。

         SplashActivity页面包括了展示logo和检查版本是否能够更新,项目初始化等等。

         HomeActivity页面就仅仅用Gridview创建了一个九宫格和一个跑马灯效果


首先初始化SplashActivity页面:包括检查当前版本号,使用HTTP,GET方式获取服务器版本号,然后进行对比看是否服务器有更新,如果有更新,则弹出对话框提示用户更新,下载安装包后跳转到安装界面,并进行安装。

  手机安全卫士第一天

     检查当前版本号代码:

  public String getVersionName() {
PackageManager packageManager = getPackageManager();
try {
// 获取包的信息
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
int versionCode = packageInfo.versionCode;//获取版本号
String versionName = packageInfo.versionName;//获取版本名
return versionName;
} catch (PackageManager.NameNotFoundException e) {
//没有找到包抛出异常
e.printStackTrace();
}
return "";
}
   使用http获取服务器获取数据之后用Json解析数据,得到一系列的信息,比如服务器版本号,新版本号下载地址等

代码如下:

 FileInputStream fileInputStream = (FileInputStream) conn.getInputStream();
//拿到返回的数据
String result = StreamUtils.readFromStream(fileInputStream);
// 开始解析json
JSONObject jo = new JSONObject();
mVersionName = jo.getString("versionName");
mVersionCode = jo.getInt("versionCode");
mDesc = jo.getString("description");
mDownloadUrl = jo.getString("downloadUrl");
   由于要改变UI,所有要使用到Handler来更新UI线程。

   接下来是下载服务器的新版本,在用Json中已经得到了  下载的链接mDownloadUrl,使用了第三方框架xutils框架来进行下载。下载首先要判断sd卡是否存在,如果存在则进行下载,下载完毕后直接使用Intent直接跳转到安装的页面进行安装,使用隐式跳转。

 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
tvProgress.setVisibility(View.VISIBLE);// 显示进度
String target = Environment.getExternalStorageDirectory()+"/updata.apk";
HttpUtils httpUtils = new HttpUtils();
httpUtils.download(mDownloadUrl, target, new RequestCallBack<File>() {
@Override
// 下载文件的进度
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
tvProgress.setText("当前进度:"+current*100/total+"%");
}
//下载成功
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
//下载自动跳转到安装界面
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(Uri.fromFile(responseInfo.result),
"application/vnd.android.package-archive");
// startActivity(intent);
startActivityForResult(intent, 0);// 如果用户取消安装的话,
// 会返回结果,回调方法onActivityResult
}
//下载失败
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(SplashActivity.this, "下载失败!",
Toast.LENGTH_SHORT).show();
}
});
}else {
Toast.makeText(SplashActivity.this, "没有找到sdcard",
Toast.LENGTH_SHORT).show();
}
}
// 如果用户取消安装的话,回调此方法
@Override
public void onActivityReenter(int resultCode, Intent data) {
enterHome();
super.onActivityReenter(resultCode, data);
}

   值得注意的是:

## 代码组织结构 ##
- 根据业务逻辑划分
    - 办公软件
        - 出差 com.itheima.travel
        - 工资 com.itheima.money
        - 会议 com.itheima.meeting
    - 网盘
        - 上传 com.vdisk.upload
        - 下载 com.vdisk.download
        - 分享 com.vdisk.share
- 根据功能模块划分(Android开发推荐此方法)
    - Activity com.itheima.mobilesafe.activty
    - 后台服务  com.itheima.mobilesafe.service
    - 广播接受者 com.itheima.mobilesafe.receiver
    - 数据库 com.itheima.mobilesafe.db.dao
    - 对象(java bean) com.itheima.mobilesafe.domain/bean
    - 自定义控件 com.itheima.mobilesafe.view
    - 工具类 com.itheima.mobilesafe.utils
    - 业务逻辑 com.itheima.mobilesafe.engine

## 签名冲突 ##
> 如果两个应用程序, 包名相同, 但是签名不同, 就无法覆盖安装
> 正式签名
    1. 有效期比较长,一般大于25年
    2. 需要设置密码
    3. 正式发布应用时,必须用正式签名来打包
> 测试签名(debug.keystore)
   1. 有效期是1年,很短
    2. 有默认的别名,密码, alias=android, 密码是androiddebugkey
    3. 在eclipse中直接运行项目是,系统默认采用此签名文件
> 如果正式签名丢失了怎么办?
    1. 修改包名, 发布, 会发现有两个手机卫士, 用户会比较纠结
    2. 请用户先删掉原来的版本,再进行安装, 用户会流失