应用版本更新Xutils3

当然你在写这个的时候需要用到一个服务器   你可以把自己的电脑当成服务器     

链接:https://pan.baidu.com/s/1cGwCCA 密码:oczr

用这个服务器要配置java环境变量

配置完成之后运行bin--》startup.bat      必须一直开着



1.导包     链接:https://pan.baidu.com/s/1geSNx43 密码:u75d


2.创建一个类mama继承Application    然后初始化      

public class mama extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.setDebug(true);
        x.Ext.init(this);
    }
}



3.在清单文件中用name调用






4.主函数

public class MainActivity extends AppCompatActivity {
    //这是服务器提供的接口
    String url="http://169.254.92.24:8080/22.txt";
    private String upgradeinfo;
    private RequestParams request;
    private String appname;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建请求参数.
        request = new RequestParams(url);

        x.http().get(request, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String s) {


                try {
                    JSONObject json= new JSONObject(s);
                    //得到信息
                    upgradeinfo = json.getString("upgradeinfo");
//                    //得到最新版的apk下载地址
                    final String up = json.getString("updateurl");
//                    //得到app的名字
                    appname=json.getString("appname");
//                    //得到最新版的版本号
//                    json.getString("serverVersion");
//                    //是否强制更新    用最简单的if判断就行
//                    json.getString("lastForce");
                    //得到服务器的版本号
                    String serverVersion = json.getString("serverVersion");
                    //得到应用包的管理者
                    PackageInfo pack = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(), 0);
                    //从管理者里面拿到应用版本号
                    int versionCode = pack.versionCode;
                    //判断当应用版本号低于服务器的版本号,就会提示升级
                    if(versionCode<Integer.valueOf(serverVersion)){
                        Log.d("aaaa",s);
                         new AlertDialog.Builder(MainActivity.this)
                                    .setTitle("版本更新")
                                    .setIcon(R.mipmap.ic_launcher)
                                    .setMessage(upgradeinfo)
                                    .setCancelable(false)//除了对话框以外都不能点击
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialogInterface, int i) {
                                            Toast.makeText(MainActivity.this, "你不能点我的", Toast.LENGTH_SHORT).show();
                                        }
                                    }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {


                                    Toast.makeText(MainActivity.this, "谁叫你点我的", Toast.LENGTH_SHORT).show();
                                    //要下载的文件到这个地址
                                    final String ss= Environment.getExternalStorageDirectory().getAbsolutePath()+"/downloads/";
                                    //接口给定的最新版本下载地址
                                    RequestParams request1 = new RequestParams(up);
                                    //给要下载的文件取名字
                                    request1.setSaveFilePath(ss+appname);
                                    x.http().request(HttpMethod.GET,request1, new Callback.ProgressCallback<File>() {
                                        @Override
                                        public void onSuccess(File file) {

                                        }

                                        @Override
                                        public void onError(Throwable throwable, boolean b) {

                                        }

                                        @Override
                                        public void onCancelled(CancelledException e) {

                                        }

                                        @Override
                                        public void onFinished() {

                                        }

                                        @Override
                                        public void onWaiting() {

                                        }

                                        @Override
                                        public void onStarted() {

                                        }
                                        //long l:文件总大小, long l1,当前进度.boolean b,是否正在下载
                                        @Override
                                        public void onLoading(long l, long l1, boolean b) {
                                            //创建通知
                                            NotificationManager mNotifyManager = (NotificationManager) MainActivity.this.getSystemService(NOTIFICATION_SERVICE);
                                            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this);
                                            mBuilder.setSmallIcon(R.mipmap.ic_launcher);
                                            mBuilder.setContentTitle("版本更新");

                                            //判断是否下载完成
                                            if(l==l1){
                                                Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT).show();
                                                mBuilder.setContentText("下载完成");
                                                mNotifyManager.notify(10086, mBuilder.build());
                                                //安装下载好的APP
                                                installApk(MainActivity.this,new File(ss,appname));
                                            }else {
                                                mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
                                                mBuilder.setContentTitle("版本更新");
                                                mBuilder.setContentText("正在下载...");
                                                //更新通知栏进度条
                                                mBuilder.setProgress((int) l, (int) l1, false);
                                                Notification notification = mBuilder.build();
                                                notification.flags = Notification.FLAG_AUTO_CANCEL;
                                                //参数1:通知id,参数:通知.
                                                mNotifyManager.notify(10086, notification);

                                            }



                                        }
                                    });



                                }
                            }).create().show();//这一步别忘记了   不然出不来对话框


                    }

                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }

            @Override
            public void onError(Throwable throwable, boolean b) {

            }

            @Override
            public void onCancelled(CancelledException e) {

            }

            @Override
            public void onFinished() {

            }
        });


    }
    //安装下载好的APP
    private void installApk(Context context, File file) {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        context.startActivity(intent);
    }





}



5.布局根据需求写    也可以不写

目前xUtils主要有四大模块: DbUtils模块: android中的orm框架,一行代码就可以进行增删改查; 支持事务,默认关闭; 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名); 支持绑定外键,保存实体时外键关联实体自动保存或更新; 自动加载外键关联实体,支持延时加载; 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。 ViewUtils模块: android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定; 新的事件绑定方式,使用混淆工具混淆后仍可正常工作; 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。 HttpUtils模块: 支持同步,异步方式的请求; 支持大文件上传,上传大文件不会oom; 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求; 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件; 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。 BitmapUtils模块: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象; 支持加载网络图片和本地图片; 内存管理使用lru算法,更好的管理bitmap内存; 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等... 使用xUtils快速开发框架需要有以下权限: 混淆时注意事项: 添加Android默认混淆配置${sdk.dir}/tools/proguard/proguard-android.txt 不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; } 对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");收缩
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值