Android 升级模块 ApkUpdateTool

GPL
Java 查看源码»
Android
2016-12-04
非著名程序員ML

ApkUpdateTool

android 應用版本更新框架,將所有的版本更新業務進行了進一步的封裝,開發人員衹需簡單的接入就可以進行版本更新了 ,支持自定義的dialog提示和自定義 notification

使用方法

如何接入?

gradle 接入方式

    compile 'com.ml.apkupdate:appupdate:1.0.7@aar'
    compile 'com.ml.asynchttp:asynchttp-android:1.0.7'

調用

首先在清單文件中加入服務,以及網絡權限和文件讀寫權限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <service android:name="com.uyin.apkupdate.service.UpdateVersionService"/>
    ApkUpdateCheck<ResonseEnty ,VersionBean> apkUpdateCheck=new ApkUpdateCheck(url, new AppVersionCheckCallBack<ResonseEnty,VersionBean>() { @Override public String getTitle(VersionBean t) { //這個是在顯示dialog的title部分 return t.getVersionNo();
                    } @Override public String getContent(VersionBean t) { //這個是在顯示dialog的cotent部分 return t.getVersionName();
                    } @Override public String getDownURL(VersionBean t) { String url=UrlEncodeUtils.encodeUrl(t.getVersionUrl()); Log.e("tag","url="+url); return "http://www.jiujiumiandan.cn/jiujiumiandan-user.apk";
                    } @Override public boolean isMustUpdate(VersionBean t) { //表示是否必須更新 版本,如果返回true  dialog消失的話,app也會關閉 return true;
                    } @Override public boolean isShowDialog(ResonseEnty t1) { //這個方法主要是 判斷 是否要需要更新版本,返回的boolean類型是判斷是否要顯示更新版本的dialog的 return true;
                    } @Override public String getResultDesConstants(String result) { String dasd=DesConstants.DecryptDoNet(result, DesConstants.AESKey); Log.e("tag",dasd);
                        dasd= "{\"Status\":1,\"ErrCode\":\"000000\",\"ErrMsg\":null,\"ResultJson\":\"{\\\"VersionId\\\":1,\\\"VersionNo\\\":\\\"2.1.1\\\",\\\"VersionName\\\":\\\"2.1.1\\\",\\\"VersionLog\\\":\\\"久久免单---用我买单,好酒免单\\\\n\\\\n【优化】我要买单的界面布局局部调整。\\\\n\\\\n我们始终致力于改善您的体验,若果您觉得我们这个版本还不错,请在应用商城给我们一个评价,我们感激不尽。\\\\n如果您有什么问题,可以直接在微信公众号:久久免单 或 APP个人中心--反馈中直接留言,我们将及时反馈您的问题。\\\",\\\"VersionUrl\\\":\\\"http://www.jiujiumiandan.cn/jiujiumiandan-user.apk\\\",\\\"MustUpdate\\\":false}\"}"; //dasd這裏對應的就是  ResonseEnty  ,其中的ResultJson對應的就是 VersionBean  ,所以如果服務器返回的數據類型衹是ResultJson那在初始化的時候,直接傳入兩個相同的ApkUpdateCheck<VersionBean ,VersionBean> return dasd;
                    } @Override public VersionBean getResultBaen(ResonseEnty t1) { return new Gson().fromJson(t1.getResultJson(),VersionBean.class); //這裏是根據 ResonseEnty的返回值 初始化 VersionBean }
                });
                apkUpdateCheck.setActivity(MainActivity.this);
                apkUpdateCheck.setResultBean(ResonseEnty.class);
                apkUpdateCheck.check();
  • #####注意 :實體類型的字段必須要和網絡請求返回的字段一致,否則會出錯

如何自定義dialog和 notification?

如果要自定義dialog,衹需要繼承ApkUpdateDialog

public class DefaultDialog extends ApkUpdateDialog { public DefaultDialog(Context context) { super(context);
    } @Override public int getLayout() { return R.layout.app_update_custom_dialog;
    } @Override public int getCancleViewId() { return R.id.cancel;
    } @Override public int getConfirmViewId() { return R.id.confirm;
    } @Override public int getTitleViewId() { return R.id.dialog_title;
    } @Override public int getContentViewId() { return R.id.dialog_deatail;
    }
}

和dialog不用的是,notification不但可以繼承ApkUpdateNotification來實現,你也可以通過實現NoticeListener來自己創建更炫的notification

public class DefaultNotification extends ApkUpdateNotification { public DefaultNotification(Application application) { super(application);
    } @Override protected Notification initNotification(Notification downLoadNotification) { return downLoadNotification;
    } @Override public int getLayoutId() { return R.layout.view_notification_updateversion;
    } @Override public void updateRoteView(RemoteViews remoteView, long current, long total) { int progress= (int) (current*100f/total);
        remoteView.setTextViewText(R.id.tv_progress,""+progress+"%");
        remoteView.setProgressBar(R.id.pb_progress,100,progress,false);
    } @Override public int getLogoId() { return R.drawable.ic_launcher;
    } @Override protected void onFinish() {

    }
}

使用自定義的dialog和 Notification

  ApkUpdateCheck<ResonseEnty ,VersionBean> apkUpdateCheck=new ApkUpdateCheck(url, new AppVersionCheckCallBack<ResonseEnty,VersionBean>() {

                },new DefaultDialog(MainActivity.this),new DefaultNotification(MainActivity.this.getApplcation()));
                apkUpdateCheck.setActivity(MainActivity.this);
                apkUpdateCheck.setResultBean(ResonseEnty.class);
                apkUpdateCheck.check();

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

作者其他开源

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

android ant

android ant

2014/07/18 11:34
101
0
How to build .apk file from command line

How to build .apk file from command line Created on Wednesday, 29 June 2011 14:32 If you don’t want to install a number of programs for building your Android project, this arti...

2012/12/25 14:23
373
0
Android documentation decompile

一篇旧文,但内容毫不过时

2014/05/15 23:36
69
0
转载:分析apk工具aapt的使用,解析其原理

通过apktool我们的确可以反编译已经序列化后的AndroidManifest.xml和资源文件等等,但是有没有一种快速有效的工具在不解包的前提下可以获得某一apk的基本内容、权限以及该apk的基本信息呢?答...

2015/06/17 15:26
2K
1
resigning APK(APK签名)

1、Use resign tool to re-sign an APK 2、Manually re-sign APK To manually re-sing APK:s follow the below steps: * Un-zip the APK file * Delete the META-¬INF folder * Re-zip t...

2014/02/11 11:04
317
0
Adnroid Studio Gradle 多渠道打包

介绍使用Android Studio Gradle一次生成多个渠道包的方法 (结尾附带umeng多渠道打包方法)

2015/01/03 16:45
192
0
android aapt查看apkmenifast信息

aapt:Android Asset Packaging Tool , 在SDK的tools/目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件. 同步软件中得到apk信息就是用...

2013/12/01 11:01
510
0
spring官网上下载历史版本的spring插件,springsource-tool-suite

spring官网下载地址(https://spring.io/tools/sts/all),历史版本地址(https://spring.io/tools/sts/legacy)。 注:历史版本下载的都是装好插件的eclipse,而非我们需要的插件 目前官网上提...

02/23 16:05
34
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部