蒲公英分布平台下载更新实现
1.使用蒲公英平台上传app,能够自动检测版本,进行更新提示,以及下载app。同时能够摇一摇进行反馈意见,对app下载数量进行统计,错误日志的反馈等实现。
2.蒲公英地址:https://www.pgyer.com/
3.下载android sdk
4.sdk只有一个jar包,没有so文件。复制过来添加为依赖就行了。
5.project 下的gradle需要改点东西,[加粗部分]
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.1.0'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files} }allprojects { repositories {jcenter()maven { url "https://raw.githubusercontent.com/Pgyer/mvn_repo_pgyer/master" }} }task clean(type: Delete) {delete rootProject.buildDir }
6.module下的gradle
apply plugin: 'com.android.application'android {compileSdkVersion 23buildToolsVersion "23.0.3"defaultConfig {applicationId "myapplication.com.mypugongying"minSdkVersion 15targetSdkVersion 23 versionCode 1versionName "1.6"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}} }dependencies {compile fileTree(include: ['*.jar'], dir: 'libs')testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.3.0'compile files('libs/pgyer_sdk_2.4.4.jar')compile 'com.jiechic.library:xUtils:2.6.14' }
7.加入的权限以及appid
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="myapplication.com.mypugongying"android:versionCode="1"android:versionName="1.6"><!-- 蒲公英权限 开始--><!-- 必选--><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"/> <!-- 允许程序录制音频 --><!-- 可选--><uses-permission android:name="android.permission.READ_LOGS"/> <!-- 获取logcat日志 --><!-- 蒲公英权限 结束--><applicationandroid:name=".PgyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- pgy--><meta-dataandroid:name="PGYER_APPID"android:value="44dd260d8834e5b779b242fe77545681" ></meta-data><!-- pgy --></application></manifest>
8. 下载工具类:Httputils
package myapplication.com.mypugongying;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL;/*** Created by Administrator on 2016/10/18.*/ public class Httputils {public static String doPost(String url, String param){PrintWriter out = null;BufferedReader in = null;String result = "";try{URL realUrl = new URL(url);// 打开和URL之间的连接HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");conn.setRequestProperty("charset", "utf-8");conn.setUseCaches(false);// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// conn.setReadTimeout(TIMEOUT_IN_MILLIONS);//conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);if (param != null && !param.trim().equals("")){// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数 out.print(param);// flush输出流的缓冲 out.flush();}// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null){result += line;}} catch (Exception e){e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally{try{if (out != null){out.close();}if (in != null){in.close();}} catch (Exception ex){ex.printStackTrace();}}return result;}}
View Code
9.PgyApplication.这里的名称需要在配置文件中加入: android:name=".PgyApplication"
package myapplication.com.mypugongying;/*** Created by Administrator on 2016/10/18.*/ import com.pgyersdk.crash.PgyCrashManager; import com.pgyersdk.javabean.AppBean; import com.pgyersdk.update.PgyUpdateManager; import com.pgyersdk.update.UpdateManagerListener;import android.app.Application; import android.content.DialogInterface; import android.support.v7.app.AlertDialog;public class PgyApplication extends Application {@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();PgyCrashManager.register(this);} }
View Code
10. mainactivity.java
package myapplication.com.mypugongying;import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Environment; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.pgyersdk.crash.PgyCrashManager; import com.pgyersdk.javabean.AppBean; import com.pgyersdk.update.PgyUpdateManager; import com.pgyersdk.update.UpdateManagerListener;import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;import java.io.File;public class MainActivity extends AppCompatActivity {String checkurl="http://www.pgyer.com/apiv1/app/viewGroup";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String codeversin=getVersion();new Thread(new Runnable() {@Overridepublic void run() {check();}}).start();}private void installAPK(File savedFile) {//调用系统的安装方法Intent intent=new Intent();intent.setAction(intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(savedFile), "application/vnd.android.package-archive");startActivity(intent);finish();}public void check(){//当所用app前版本号String codeversin=getVersion();String s="aId=44dd260d8834e5b779b242fe77545681&_api_key=1482c455937aee3ecd2611f901f1759b";// String sss= Httputils.doPost(checkurl,s);System.out.println("ttt"+sss);try {JSONObject object=new JSONObject(sss);JSONArray array=object.getJSONArray("data");for(int i=0;i<array.length();i++){JSONObject object1=array.getJSONObject(i);String appVersion=object1.getString("appVersion");double x1=Double.valueOf(appVersion);double x2=Double.valueOf(codeversin);if(x1>x2){download();}}} catch (JSONException e) {e.printStackTrace();}// }public void download(){String target = Environment.getExternalStorageDirectory()+ "/update.apk";String path="https://www.pgyer.com/apiv1/app/install?aId=44dd260d8834e5b779b242fe77545681&_api_key=1482c455937aee3ecd2611f901f1759b";HttpUtils utils = new HttpUtils();utils.download(path, target, new RequestCallBack<File>() {@Overridepublic void onLoading(long total, long current, boolean isUploading) {super.onLoading(total, current, isUploading);System.out.println("current:"+current+"/"+total);}@Overridepublic void onSuccess(ResponseInfo<File> arg0) {System.out.print("****"+arg0.toString());System.out.println("下载成功");String path=Environment.getExternalStorageDirectory()+ "/update.apk";File file=new File(path);installAPK(file);}@Overridepublic void onFailure(HttpException arg0, String arg1) {System.out.print("*1***"+arg0.toString());System.out.print("**1**"+arg1);System.out.println("下载失败");}});}private String getVersion(){PackageInfo pkg;String versionName="";try {pkg = getPackageManager().getPackageInfo(getApplication().getPackageName(), 0);String appName = pkg.applicationInfo.loadLabel(getPackageManager()).toString();versionName = pkg.versionName;System.out.println("appName:" + appName);System.out.println("versionName:" + versionName);} catch (PackageManager.NameNotFoundException e) {// TODO Auto-generated catch block e.printStackTrace();}return versionName;} }
插张图:
<!-------------上面的已经实现检查版本号,更新功能了-------- 看下面的细节------------------------------------>
1.请求利用的:xUtils
2.
POST http://www.pgyer.com/apiv1/app/viewGroup
参数 | 类型 | 说明 |
---|---|---|
aId | String | App Id |
_api_key | String | API Key 点击获取API Key |
请求结果示例:
{
"code": 0,
"message": "",
"data": [
{
"appKey": "4afb80cd8d647540800fc0f94ad0d433",
"appType": "2",
"appIsLastest": "2",
"appFileName": "mypugongying-debug.apk",
"appFileSize": "1319716",
"appName": "MyPuGongYing",
"appVersion": "1.0.4",
"appVersionNo": "1",
"appBuildVersion": "4",
"appIdentifier": "myapplication.com.mypugongying",
"appIcon": "83378890c501827f74e4daade7227c8b",
"appDescription": "",
"appUpdateDescription": "",
"appScreenshots": "",
"appShortcutUrl": "g361",
"appCreated": "2016-10-18 14:00:30",
"appUpdated": "2016-10-18 14:00:30",
"appQRCodeURL": "http:\/\/static.pgyer.com\/app\/qrcodeHistory\/9d280728c3c7dffc912921fcf1553ba618338284c4da159b4d098aebbd490f15"
},
{
"appKey": "ec8ee876789755c35d3343dc1e23125d",
"appType": "2",
"appIsLastest": "1",
"appFileName": "mypugongying-debug (2).apk",
"appFileSize": "1319717",
"appName": "MyPuGongYing",
"appVersion": "1.0.5",
"appVersionNo": "1",
"appBuildVersion": "5",
"appIdentifier": "myapplication.com.mypugongying",
"appIcon": "0cf04c160f1254a808679f1a510aa674",
"appDescription": "",
"appUpdateDescription": "",
"appScreenshots": "",
"appShortcutUrl": "g361",
"appCreated": "2016-10-18 14:02:25",
"appUpdated": "2016-10-18 14:02:25",
"appQRCodeURL": "http:\/\/static.pgyer.com\/app\/qrcodeHistory\/07c5c9d7a22cc4e8af8a13a1414523a8db84716089ae8ed9f048cea2d3774ea7"
}
]
}
可以找到所有版本的 "appVersion": "1.0.4",,然后在得到当前appverision,判断是不是最新版本。
3.然后下载安装就行了。
4.当然也可以加入摇一摇反馈功能,看图
这个很简单,在需要感应摇一摇的activity中加入下面的代码就行:
1 @Override 2 protected void onResume() { 3 // TODO Auto-generated method stub 4 super.onResume(); 5 6 // 自定义摇一摇的灵敏度,默认为950,数值越小灵敏度越高。 7 PgyFeedbackShakeManager.setShakingThreshold(1000); 8 9 // 以对话框的形式弹出 10 PgyFeedbackShakeManager.register(MainActivity.this); 11 12 // 以Activity的形式打开,这种情况下必须在AndroidManifest.xml配置FeedbackActivity 13 // 打开沉浸式,默认为false 14 // FeedbackActivity.setBarImmersive(true); 15 PgyFeedbackShakeManager.register(MainActivity.this, false); 16 17 } 18 19 @Override 20 protected void onPause() { 21 // TODO Auto-generated method stub 22 super.onPause(); 23 PgyFeedbackShakeManager.unregister(); 24 }
View Code
当然摇一摇,有时手机锁屏了还能感应,对此可以改成点击事件,弹出反馈界面:
如下,加一行代码就行:
1 textView.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 PgyFeedback.getInstance().showDialog(AboutMe_Activity.this); 5 6 // 以Activity的形式打开,这种情况下必须在AndroidManifest.xml配置FeedbackActivity 7 // 打开沉浸式,默认为false 8 // FeedbackActivity.setBarImmersive(true); 9 // PgyFeedback.getInstance().showActivity(AboutMe_Activity.this); 10 11 } 12 });
<!-- 结束了,就这么多。上面的调用接口实现的检查更新下载,蒲公英毕竟也是没怎么-用过。完整的代码:http://pan.baidu.com/s/1jIsc5Hs-->
<!-- 下面调用蒲公英sdk方法自动检查版本更新下载-->
1.步骤和上面一样,就是在activity里面加入这些加粗部分代码,实现自动更新即可。
1 package myapplication.com.mypugongying; 2 3 import android.content.DialogInterface; 4 import android.content.Intent; 5 import android.content.pm.PackageInfo; 6 import android.content.pm.PackageManager; 7 import android.net.Uri; 8 import android.os.Environment; 9 import android.support.v7.app.AlertDialog; 10 import android.support.v7.app.AppCompatActivity; 11 import android.os.Bundle; 12 13 import com.lidroid.xutils.HttpUtils; 14 import com.lidroid.xutils.exception.HttpException; 15 import com.lidroid.xutils.http.ResponseInfo; 16 import com.lidroid.xutils.http.callback.RequestCallBack; 17 import com.pgyersdk.activity.FeedbackActivity; 18 import com.pgyersdk.crash.PgyCrashManager; 19 import com.pgyersdk.feedback.PgyFeedbackShakeManager; 20 import com.pgyersdk.javabean.AppBean; 21 import com.pgyersdk.update.PgyUpdateManager; 22 import com.pgyersdk.update.UpdateManagerListener; 23 24 import org.json.JSONArray; 25 import org.json.JSONException; 26 import org.json.JSONObject; 27 28 import java.io.File; 29 30 public class MainActivity extends AppCompatActivity { 31 32 String checkurl="http://www.pgyer.com/apiv1/app/viewGroup"; 33 @Override 34 protected void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 setContentView(R.layout.activity_main); 37 38 String codeversin=getVersion(); 39 40 PgyUpdateManager.register(this); 41 FeedbackActivity.setBarImmersive(true); 42 43 PgyCrashManager.register(this); 44 45 // new Thread(new Runnable() { 46 // @Override 47 // public void run() { 48 // check(); 49 // } 50 // }).start(); 51 52 53 54 PgyUpdateManager.register(MainActivity.this,new UpdateManagerListener() { 55 56 @Override 57 public void onUpdateAvailable(final String result) { 58 59 // 将新版本信息封装到AppBean中 60 final AppBean appBean = getAppBeanFromString(result); 61 new AlertDialog.Builder(MainActivity.this) 62 .setTitle("更新") 63 .setMessage("") 64 .setNegativeButton("确定", new DialogInterface.OnClickListener() { 65 @Override 66 public void onClick(DialogInterface dialog, int which) { 67 startDownloadTask(MainActivity.this, appBean.getDownloadURL()); 68 } 69 }).show(); 70 } 71 72 @Override 73 public void onNoUpdateAvailable() { 74 } 75 }); 76 } 77 78 79 80 private void installAPK(File savedFile) { 81 //调用系统的安装方法 82 Intent intent=new Intent(); 83 intent.setAction(intent.ACTION_VIEW); 84 intent.setDataAndType(Uri.fromFile(savedFile), "application/vnd.android.package-archive"); 85 startActivity(intent); 86 finish(); 87 } 88 89 90 public void check(){ 91 //当所用app前版本号 92 String codeversin=getVersion(); 93 94 String s="aId=44dd260d8834e5b779b242fe77545681&_api_key=1482c455937aee3ecd2611f901f1759b"; 95 // 96 String sss= Httputils.doPost(checkurl,s); 97 System.out.println("ttt"+sss); 98 try { 99 JSONObject object=new JSONObject(sss); 100 JSONArray array=object.getJSONArray("data"); 101 for(int i=0;i<array.length();i++){ 102 JSONObject object1=array.getJSONObject(i); 103 String appVersion=object1.getString("appVersion"); 104 double x1=Double.valueOf(appVersion); 105 double x2=Double.valueOf(codeversin); 106 if(x1>x2){ 107 download(); 108 109 } 110 } 111 112 } catch (JSONException e) { 113 e.printStackTrace(); 114 } 115 116 // 117 } 118 119 public void download(){ 120 String target = Environment.getExternalStorageDirectory()+ "/update.apk"; 121 String path="https://www.pgyer.com/apiv1/app/install?aId=44dd260d8834e5b779b242fe77545681&_api_key=1482c455937aee3ecd2611f901f1759b"; 122 123 HttpUtils utils = new HttpUtils(); 124 utils.download(path, target, new RequestCallBack<File>() { 125 @Override 126 public void onLoading(long total, long current, boolean isUploading) { 127 super.onLoading(total, current, isUploading); 128 System.out.println("current:"+current+"/"+total); 129 } 130 @Override 131 public void onSuccess(ResponseInfo<File> arg0) { 132 System.out.print("****"+arg0.toString()); 133 System.out.println("下载成功"); 134 String path=Environment.getExternalStorageDirectory()+ "/update.apk"; 135 File file=new File(path); 136 installAPK(file); 137 } 138 139 @Override 140 public void onFailure(HttpException arg0, String arg1) { 141 System.out.print("*1***"+arg0.toString()); 142 System.out.print("**1**"+arg1); 143 144 145 System.out.println("下载失败"); 146 } 147 }); 148 149 } 150 151 152 private String getVersion(){ 153 PackageInfo pkg; 154 String versionName=""; 155 try { 156 pkg = getPackageManager().getPackageInfo(getApplication().getPackageName(), 0); 157 String appName = pkg.applicationInfo.loadLabel(getPackageManager()).toString(); 158 versionName = pkg.versionName; 159 System.out.println("appName:" + appName); 160 System.out.println("versionName:" + versionName); 161 162 } catch (PackageManager.NameNotFoundException e) { 163 // TODO Auto-generated catch block 164 e.printStackTrace(); 165 } 166 return versionName; 167 } 168 169 170 171 @Override 172 protected void onResume() { 173 // TODO Auto-generated method stub 174 super.onResume(); 175 176 // 自定义摇一摇的灵敏度,默认为950,数值越小灵敏度越高。 177 PgyFeedbackShakeManager.setShakingThreshold(1000); 178 179 // 以对话框的形式弹出 180 PgyFeedbackShakeManager.register(MainActivity.this); 181 182 // 以Activity的形式打开,这种情况下必须在AndroidManifest.xml配置FeedbackActivity 183 // 打开沉浸式,默认为false 184 // FeedbackActivity.setBarImmersive(true); 185 PgyFeedbackShakeManager.register(MainActivity.this, false); 186 187 } 188 189 @Override 190 protected void onPause() { 191 // TODO Auto-generated method stub 192 super.onPause(); 193 PgyFeedbackShakeManager.unregister(); 194 } 195 196 197 198 }
转载于:https://www.cnblogs.com/galibujianbusana/p/5973062.html
蒲公英分布平台下载更新实现相关推荐
- 战地5离线bot模式_战地系列、烂橘子平台下载更新慢咋办?我这里有两个亲测有有效的方式。...
对战地系列或EA的其他游戏感兴趣的同志们,都对origin的那感人的下载速度深有感触吧.今天我给总结了两种可以提高速度的方法.(有加速器是前提) 第一种,改EAcore.ini文件 打开origin的 ...
- 解决Windows平台通过cURL上传APP到蒲公英pgyer平台时无法使用中文升级描述的问题...
解决Windows平台通过cURL上传APP到蒲公英pgyer平台时无法使用中文升级描述的问题 官方上传命令 curl -F file=@"315.apk" -F uKey=XXX ...
- 安装慢_Origin平台安装更新慢的解决办法
Origin平台安装更新慢的解决办法: origin开始下载更新后, [注: ProgramDate文件夹需勾选 隐藏的项目 才能显示] 首先在C:ProgramDataOriginSelfUpdat ...
- 深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰教授简历(长文慎入,公号回复“深度学习流形分布”可下载PDF资料)
深度学习的几何观点:1流形分布定律.2学习能力的上限.附顾险峰教授简历(长文慎入,公号回复"深度学习流形分布"可下载PDF资料) 原创: 顾险峰 数据简化DataSimp 今天 数 ...
- 特种部队小组2+蒲公英联机平台联机教程
操作流程: 1.需要联机的两台(或多台)手机均需下载安装"蒲公英联机平台": 2.登录/注册帐号,进入APP: 3.进入APP后点击[游戏]页面,进入游戏大厅,可选择游戏[特种部队 ...
- 炸弹小分队+蒲公英联机平台联机教程
所需软件: 1.蒲公英联机平台 2.炸弹小分队APP 操作流程: 1.需要联机的两台(或多台)手机均需下载.安装蒲公英联机平台: 2.登录/注册帐号,进入APP: 3.进入APP后点击[游戏]页面,进 ...
- 泰拉瑞亚Terraria+蒲公英联机平台联机教程
所需软件: 蒲公英联机平台:泰拉瑞亚游戏APP 操作流程: 1.需要联机的两台(或多台)手机均需下载.安装"蒲公英联机平台": 2.登录/注册帐号,进入APP: 3.进入APP后点 ...
- 元气骑士+蒲公英联机平台联机教程
所需软件: 1.元气骑士主机小工具 2.元气骑士游戏APP 3.蒲公英联机平台(现仅Android版) 操作流程: 1.下载蒲公英联机平台APP 2.打开APP,登录/注册帐号,进入APP: 3.进入 ...
- java 微信转账 ca_error_对接微信红包时:CA证书出错,请登录微信支付商户平台下载证书...
今天在对接微信支付的微信红包发放时,出现""CA证书出错,请登录微信支付商户平台下载证书"的错误,特此记录一下: 如果你也在对接微信红包,并且你也在这个页面上下载了dem ...
最新文章
- springMVC入门截图
- SAP ECC APO Integration - CIF 简介
- 更改vsftp端口号
- Java对象引用四个级别(强、软、弱、虚)
- python 文件操作练习
- 如何安装python3.8_python3.8下载及安装步骤详解
- 用户登陆注册功能(PHP)
- C++ 四种智能指针详解
- VMWare:打开虚拟机黑屏
- 《认知天性》:讲述基于科学的学习方法
- PMP 备考指南之计算题汇总
- 【AD封装】2.4G PCB天线(量产用)
- Mac中设置右键新建TXT文件
- 访问知乎出现【出了一点问题,我们正在解决,去往首页】解决方案
- 2015北邮计算机考研复试上机题解
- Kamailio nats模块编译
- java 编配和弦_六个和弦编配小诀窍,让你的弹唱伴奏丰富好听
- 【API】开源免费接口管理
- Android TV 开发简介
- ROS基础---ros通信、ros发布者publisher、publisher.cpp、Talker.cpp