Android APP检测更新开源库

Android项目中,很多项目都是不需要上架的,不想上架的应用可以通过第三方的分发软件进行软件的分发和软件的更新迭代,例如腾讯bugly、蒲公英等等。但是使用旧了就会觉得很坑爹。

第一:比如蒲公英,你的软件在蒲公英上,如果三个月都没有进行更新,就会过期,就需要你没三个月上传以后版本进行激活,腾讯bugly也有同样的问题。

第二:风控,如果你的软件涉及到一些敏感的信息,就会被风控掉,直接死掉。这时你就需要更新账号,重新开始,有点蛋疼。

所以,有一个自己服务器的检测更新系统是必不可少,而这个不是我们Android端负责的,我们负责的是调用接口得到更新软件的信息之后进行软件的更新。而这个功能是可以使用到所以的项目中的,所以有了封装一个开源库的想法,APP检查更新开源库也是由此产生。

不多说,先上图:

1、只是显示简单提示内容

2、显示详细更新内容(中间红线框起来的部分可以滑动查看详情)

3、自定义弹窗(如果不喜欢或者是不满足项目需要,还可以根据需求去自定义自己的更新样式,自定义方法下面介绍)

下载中

4、通知栏样式

下面就开始介绍:

一、添加依赖方式:

在project中的build.gradle中添加一下代码:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

 在module中的build.gradle中添加以下代码:

	dependencies {
	        implementation 'com.github.freakcsh:AppUpdateUtils:V1.3'
	}

二、配置权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>//安装权限

如果权限没有配置,则下载完成之后不会自动安装。

注意:在高版本的手机中,notification是需要开启了才能在通知栏中显示,如果需要显示notification,则需要自己书写代码去打开通知栏设置。

三、如果你的手机版本是6.0以上的系统,则还需要配置fileProvider

1、在res的xml文件下新建文件provider_paths.xml(名字可以自定,但是需要在meta-data的android:resource属性中对应你的名字)

2、在AndroidManifest.xml的application中加入以下代码

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>

3、在application标签中配置name属性,对应你的额application

如图所示:

配置好了之后就可以直接使用了,下面是使用方法,很简单:

四、使用方法

在接口请求成功之后,直接调用,代码如下:

        AppUtils appUtils = new AppUtils(this, null, BuildConfig.APPLICATION_ID + ".fileProvider");
      appUtils.setApkURL("https://www.pgyertest.hangmuxitong.com/uploads/20190102/android/5c2cb3f369cc2.apk")
                .setAppName("AppName")
                .setVersionCode(4)
                .setVersionName("6.0.0")
                .setForce(false)
                .setVersionInfo("版本信息")
                .setApkSize(Long.valueOf(1024))
                .setAddContent("设置新增内容")
                .setFixContent("设置修复内容")
                .setCancelContent("设置取消内容")
                .setCreateDate("2019-01-24")
                .setFileName("设置apk文件名")
                .setNotificationTitle("ajsfjka")
                .setDialogStyle(AppUtils.UPDATE_DIALOG_PARTICULAR)//选择详细更新内容弹窗
                .build();

只要设置了就可以检测更新了,setApkURL()和setVersionCode()是必须设置的,app的检测更新是根据VersionCode的值去判断是否是新版本。

方法介绍:

设置apk下载地址

setApkURL(@Nullable String apkURL)
设置app名字
setAppName(String appName)
设置Notification标题
setNotificationTitle(String notificationTitle)
设置版本号
 setVersionCode(Integer versionCode) 
设置版本名
setVersionName(String versionName)
设置是否强制更新(如果不设置则默认为false)
setForce(Boolean force)
设置版本信息
setVersionInfo(String versionInfo)
设置apk下载大小
setApkSize(Long apkSize) 
设置新增内容
setAddContent(String addContent)
设置修复内容
 setFixContent(String fixContent)
设置取消内容
setCancelContent(String cancelContent)
设置更新时间
setCreateDate(String createDate) 
设置apk文件名
setFileName(String fileName)
设置自定dialog
setUpdateDialogFragment(BaseDialogFragment updateDialogFragment) 

选择默认的两种弹窗样式中的一种(如果不设置则使用默认的style)

setDialogStyle(String dialogStyle)
五、自定义更新弹窗样式

自定义的弹窗类继承BaseDialogFragment

实现方法介绍:

设置自定义的布局文件

getLayoutId()

设置弹窗dialog的style

getDialogStyle()

初始化数据

initData()

初始化控件

initView(Dialog view)

点击立即更新时,设置按钮无法再次点击、需要再这里对按钮进行处理

disableClick(boolean b) 

例如:

mTextViewCancel.setEnabled(b);
mTextViewCommit.setEnabled(b);

设置按钮监听回调

setOnUpdateListener(OnUpdateListener onUpdateListener)

设置下载进度(如果自定义的dialog中不需要下载进度显示,则这里无需设置)

setProgress(int progress)

设置是否显示下载进度条(如果是需要下载弹窗提示中显示下载进度条,则在布局文件中是设置隐藏的,当点击更新的时候,会调用此方法显示,如果不需要进度条,则可以忽略)

setProgressBarVisibility(int b)

最后,附上使用demo

https://github.com/freakcsh/AppUpdate

如果有什么好的建议或者问题欢迎留言。

猜你喜欢

转载自blog.csdn.net/freak_csh/article/details/86600373