手机安全卫士第一天

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

今天实现的功能:闪屏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. 请用户先删掉原来的版本,再进行安装, 用户会流失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值