android使用第三方平台(蒲公英)和DownloadManager实现APP自动更新
来源:互联网 发布:淘宝全球购店铺申请 编辑:程序博客网 时间:2024/04/30 11:43
对于安卓用户来说,手机应用更新是很频繁的,我们不能在每一次升级版本的时候,都让用户再去应用市场上重新下载一遍,这样是很不友好的。因此,在app里实现自动更新的功能,就显得很有必要了。
今天,就来聊一下,如何使用蒲公英第三方平台和DownLoadManager来实现app自动更新的功能。从以下三个方面来说明:**
app自动更新流程阐述
如何集成第三方平台(蒲公英)
如何使用系统自带类DownloadManager来实现下载
一.app自动更新的流程:
二.如何集成第三方平台(蒲公英)
1.如何创建蒲公英的账号和应用,大家自行去蒲公英的官网操作,在这里就不过多说明。
2.导入依赖
compile 'com.pgyersdk:sdk:2.5.6'
3.添加权限:在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取网络状态 --><uses-permission android:name="android.permission.INTERNET" /> <!-- 网络通信 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取设备信息 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取MAC地址 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读写sdcard,storage等等 --><uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允许程序录制音频 -->
4.在AndroidManifest.xml中添加蒲公英提供的App key
<meta-data android:name="PGYER_APPID" android:value="蒲公英key" > </meta-data>
5.在蒲公英上传你开发的app,获取你的蒲公英app key,将AndroidManifest.xml中的value值换成自己的蒲公英key
三.如何使用系统自带类DownloadManager来实现下载
1.DownloadManager简单介绍
DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息。
2.新建ApkDownloadReceiver广播类来监听DownloadManager下载任务的状态,通过downloadId来查找下载的任务,如果下载完成,就去安装apk,如果下载失败,则弹出吐司提示。
public class ApkDownloadReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent data) { //获取下载任务的downloadId long downloadId = data.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (downloadId == PrefUtils.getApkDownloadId()) { DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); //通过downloadId来查找下载的任务 Cursor query = downloadManager.query(new DownloadManager.Query().setFilterById(downloadId)); try { if (query.moveToFirst()) { //获取下载任务的状态 int status = query.getInt(query.getColumnIndex(DownloadManager.COLUMN_STATUS)); switch (status) { //下载暂停 case DownloadManager.STATUS_PAUSED: break; //下载延迟 case DownloadManager.STATUS_PENDING: break; //正在下载 case DownloadManager.STATUS_RUNNING: break; //下载完成 case DownloadManager.STATUS_SUCCESSFUL: //下载完成安装APK installApk(context,query); break; //下载失败 case DownloadManager.STATUS_FAILED: //弹出提示 Toast.makeText(context, "下载失败", Toast.LENGTH_SHORT).show(); break; } } } finally { query.close(); } } } private void installApk(Context context,Cursor query) { String apkPath = query.getString(query.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE, Uri.fromFile(new File(apkPath))); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); }}
3.在AndroidManifest.xml监听下载广播完成的动作
<!--下载Apk--> <receiver android:name="com.example.marvinma.pgyerupdatedemo.ApkDownloadReceiver"> <intent-filter> <action android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver>
4.在MainActivity onStart方法中去注册蒲公英,在onDestroy方法中去反注册。
@Override protected void onStart() { super.onStart(); //获取DownloadManager类 DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); if (PrefUtils.getApkDownloadId() != -1) { //通过保存的downloadId来获取索引 Cursor query = downloadManager.query(new DownloadManager.Query(). setFilterById(PrefUtils.getApkDownloadId())); try { if (query.moveToFirst()) { //获取下载任务的状态 int status = query.getInt(query.getColumnIndex(DownloadManager.COLUMN_STATUS)); //如果已经在下载中,就返回,不再去下载 if (status == DownloadManager.STATUS_RUNNING) { return; } else { //如果是其他状态,就将之前的下载记录移除 downloadManager.remove(query.getInt(query.getColumnIndex(DownloadManager.COLUMN_ID))); PrefUtils.setApkDownloadId(-1); } } } finally { query.close(); } } //蒲公英注册 PgyUpdateManager.register(this,null,new UpdateManagerListener() { @Override public void onNoUpdateAvailable() {} @Override public void onUpdateAvailable(String s) { final AppBean appBean = getAppBeanFromString(s); VersionUtils.showUpdateDialog(MainActivity.this,appBean); } } ); } @Override protected void onDestroy() { super.onDestroy(); //蒲公英反注册 PgyUpdateManager.unregister(); }
5.下载的提示框
public class VersionUtils { public static void showUpdateDialog(final Context context, final AppBean appBean) { new AlertDialog.Builder(context) .setTitle("发现新版本" + appBean.getVersionName()) .setMessage(appBean.getReleaseNote()) .setNegativeButton("暂时忽略", null) .setPositiveButton("立即更新", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); //将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件 long apkDownloadId = downloadManager.enqueue(new DownloadManager.Request(Uri.parse(appBean.getDownloadURL())) .setVisibleInDownloadsUi(false)); Log.e("apkUrl",appBean.getDownloadURL()); //保存下载的id PrefUtils.setApkDownloadId(apkDownloadId); } }) .show(); }}
至此,使用DownloadMananger来实现下载的逻辑就完成了。接着,我们修改build.gradle的versionCode和versionName,在蒲公英上传新的app
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.marvinma.pgyerupdatedemo" minSdkVersion 18 targetSdkVersion 25 versionCode 2 versionName "2.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
效果图:
完整代码地址:http://download.csdn.net/download/maguifen2012/10156755
- android使用第三方平台(蒲公英)和DownloadManager实现APP自动更新
- Android中蒲公英第三方提示更新
- Android 通过DownloadManager实现自动更新的demo
- Android第三方之 -自动更新
- 第三方SDK:蒲公英
- 使用蒲公英平台测试iOS APP(示例)
- 使用DownloadManager 自动更新apk
- Android实现APP自动更新
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- SNS平台与第三方APP的JS通信实现
- SNS平台与第三方APP的JS通信实现
- [置顶] Android中蒲公英第三方提示更新
- IOS Android 视频播放(不使用第三方库,使用平台底层sdk)实现
- Android实现APP自动更新功能
- Android实现App版本自动更新
- Android实现App版本自动更新
- Android实现App版本自动更新
- 2017年12月12日
- 理解设计模式之命令模式
- 从FastReport.NET导出文件时,如何配置Acrobat PDF阅览器选项
- maven 构建springmvc+mybatis项目
- java生成全球唯一的UUID
- android使用第三方平台(蒲公英)和DownloadManager实现APP自动更新
- CSS基础(10.overflow)
- Winform图片局部放大效果
- 机房之学生查看余额
- windows C++实现注销、重启、关机 logoff reboot shutdown
- redis基础
- BarTender 通过ZPL命令操作打印机打印条码, 操作RFID标签
- YCSB部署
- android_fragment