Android接入百度自动更新SDK
一:前言
公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹啊,有木有。我下载下来把其他无关的jar包根so文件删掉了.把百度的demo也进行精简了一下.只留下了自动更新必须要用到的.
二:效果图如下
三:代码如下
AutoUpdateActivity.java 代码删的就剩下整个Activity了,其实调用百度sdk还挺简单的,一句话就能搞定,然后再监听回调函数.
/**
* 百度自动更新
* @author ansen
* @create time 2015-11-07
*/
public class AutoUpdateActivity extends Activity implements View.OnClickListener {
private TextView txt_log;
private ProgressDialog dialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autoupdate_main);
findViewById(R.id.btn_ui).setOnClickListener(this);
findViewById(R.id.btn_silence).setOnClickListener(this);
findViewById(R.id.btn_as).setOnClickListener(this);
findViewById(R.id.btn_noui).setOnClickListener(this);
txt_log = (TextView) findViewById(R.id.txt_log);
dialog = new ProgressDialog(this);
dialog.setIndeterminate(true);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ui://UI更新
txt_log.setText("");
dialog.show();
BDAutoUpdateSDK.uiUpdateAction(this, new MyUICheckUpdateCallback());
break;
case R.id.btn_silence:
txt_log.setText("");
BDAutoUpdateSDK.silenceUpdateAction(this);
break;
case R.id.btn_as:
txt_log.setText("");
dialog.show();
BDAutoUpdateSDK.asUpdateAction(this, new MyUICheckUpdateCallback());
break;
case R.id.btn_noui:
txt_log.setText("");
dialog.show();
BDAutoUpdateSDK.cpUpdateCheck(this, new MyCPCheckUpdateCallback());
break;
}
} @Override
protected void onDestroy() {
dialog.dismiss();
super.onDestroy();
} private class MyUICheckUpdateCallback implements UICheckUpdateCallback {
@Override
public void onCheckComplete() {
dialog.dismiss();
}
} private class MyCPCheckUpdateCallback implements CPCheckUpdateCallback {
@Override
public void onCheckUpdateCallback(AppUpdateInfo info, AppUpdateInfoForInstall infoForInstall) {
if(infoForInstall != null && !TextUtils.isEmpty(infoForInstall.getInstallPath())) {
txt_log.setText(txt_log.getText() + "\n install info: " + infoForInstall.getAppSName() + ", \nverion=" + infoForInstall.getAppVersionName() + ", \nchange log=" + infoForInstall.getAppChangeLog());
txt_log.setText(txt_log.getText() + "\n we can install the apk file in: " + infoForInstall.getInstallPath());
BDAutoUpdateSDK.cpUpdateInstall(getApplicationContext(), infoForInstall.getInstallPath());
}else if(info != null) {
BDAutoUpdateSDK.cpUpdateDownload(AutoUpdateActivity.this, info, new UpdateDownloadCallback());
}else {
txt_log.setText(txt_log.getText() + "\n no update.");
}
dialog.dismiss();
} } private class UpdateDownloadCallback implements CPUpdateDownloadCallback {
@Override
public void onDownloadComplete(String apkPath) {
txt_log.setText(txt_log.getText() + "\n onDownloadComplete: " + apkPath);
BDAutoUpdateSDK.cpUpdateInstall(getApplicationContext(), apkPath);
} @Override
public void onStart() {
txt_log.setText(txt_log.getText() + "\n Download onStart");
} @Override
public void onPercent(int percent, long rcvLen, long fileSize) {
txt_log.setText(txt_log.getText() + "\n Download onPercent: " + percent + "%");
} @Override
public void onFail(Throwable error, String content) {
txt_log.setText(txt_log.getText() + "\n Download onFail: " + content);
} @Override
public void onStop() {
txt_log.setText(txt_log.getText() + "\n Download onStop");
}
}
}
autoupdate_main.xml AutoUpdateActivity加载的布局文件.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dip"
android:orientation="vertical"
android:gravity="center"
tools:context="${packageName}.${activityClass}" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <Button
android:id="@+id/btn_ui"
android:layout_width="match_parent"
android:layout_height="40dip"
android:text="UI更新"/> <Button
android:id="@+id/btn_silence"
android:layout_width="match_parent"
android:layout_height="40dip"
android:text="静默更新"
/> <Button
android:id="@+id/btn_as"
android:layout_width="match_parent"
android:layout_height="40dip"
android:text="百度助手更新"
/> <Button
android:id="@+id/btn_noui"
android:layout_width="match_parent"
android:layout_height="40dip"
android:text="无UI更新"
/>
</LinearLayout> <ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:id="@+id/txt_log"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</ScrollView> </LinearLayout>
四.注意事项
1.需要引用另外一个项目,另外一个项目里面必须有两个百度的jar包.BDAutoUpdate_APPX_SDK_20150826.jar跟need_lib.jar
2.需要在AndroidManifest.xml中配置appid,appkey,还有弹窗显示的Activity.
<!-- 百度自动更新SDK Appid配置,AppKey配置-->
<meta-data android:name="BDAPPID" android:value="3067515"/>
<meta-data android:name="BDAPPKEY" android:value="f3Os4GAOqxgm79GqbnkT9L8T"/>
<!-- 百度自动更新SDK -->
<activity
android:name="com.baidu.autoupdatesdk.ConfirmDialoigActivity"
android:exported="false"
android:screenOrientation="sensor"
android:theme="@style/bdp_update_dialog_style_fullscreen"/>
3.appid跟appkey是官网申请的 http://app.baidu.com/value/sdkservice?f=9
推荐下自己创建的android QQ群:202928390 欢迎大家的加入.
Android接入百度自动更新SDK的更多相关文章
- [转]Android应用的自动更新
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- android之apk自动更新解析包失败问题
在apk自动更新(相关问题可以看我的博客http://blog.csdn.net/caicongyang) 从服务器下载完成后,点击notification提示安装时,每次都报解析包失败错误!首先我想 ...
- Android App版本自动更新
App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...
- 【Android 应用开发】Android应用的自动更新模块
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...
- 安卓程序代写 网上程序代写[原]Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- 转载:Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- android 数据绑定(3)自动更新UI
1.官方文档 https://developer.android.com/topic/libraries/data-binding/observability 2.observable 属性 适合对象 ...
- Android(2)—Mono For Android App版本自动更新
0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...
随机推荐
- nginx android app 慢网络请求超时
最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...
- STM32之输入捕获以及小小应用(库)
五一之际,先祝大家五一快乐.其实快乐很简单,工作的人有假放,学习的人也有假放,像我,有假放才有更多的时间学自己想学的东西.51假期学51,可惜没有32假期呀.好了..言归正传,大家听过吸星大法吧..在 ...
- ios设备中openGL所支持的最大纹理尺寸
这几天碰到一个在iphone4上显示图片未黑色矩形的bug,在其他机器上都正常 最后发现是图片打包尺寸的关系,iphone4无法读取2048以上大小的单个图片,所以其中的图片都显示成了黑色,希望对碰到 ...
- C\C++中声明与定义的区别
声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...
- 三、jquery操作DOM
DOM(Document Object Model, 文档对象模型)为文档提供了一种结构化的表示方法,通过该方法可以改变文档的内容和展示形式.在实际运用中,DOM更像是桥梁,通过它可以实现跨平台.跨语 ...
- ES6(五) 数组扩展
Array.of方法用于将一组值,转换为数组. Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES ...
- 如何修改SQL SERVER服务器的端口
sql server的服务器端口默认是1433,设置服务器端口的位置在这里: 这里的端口,默认是1433,我把它改成了65499 修改端口之后,客户端如何连接? 下面是SSMS的连接方式: 下面是一个 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
- Javascript闭包和C#匿名函数对比分析
C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...
- Oracle没有WM_CONCAT函数的解决办法
WM_CONCAT是oracle的非公开函数,并不鼓励使用,新版本oracle并没有带此函数,需要手工加上. 1.下载三个文件:owmctab.plb . owmaggrs.plb . owmagg ...