安卓开发---仿网易云小火箭dialog一个简单的自动更新弹窗以及下载apk
来源:互联网 发布:华为软件培训 编辑:程序博客网 时间:2024/05/20 04:11
先看效果图 前面是网易云的小火箭更新dialog
先说思路吧,想实现自动更新版本,最简单就是获取到应用的包信息,应用版本号,版本名,然后每次登陆的时候从服务器获取当前apk的版本号和版本名,然后进行判断,不一致证明是新版本,弹出dialog 让用户更新,选择立即更新调用浏览器下载(系统自带的),然后就是安装了...balabala
步骤 1,获取包信息,版本号,版本名
/** * 返回当前程序版本名 build.gradle */public String getAppVersionName(Context context) { try { // ---get the package info--- PackageManager pm = context.getPackageManager(); PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0); versionName = pi.versionName; versioncode = pi.versionCode; LogUtil.d("versionName:---"+versionName,"versioncode:---"+versioncode); if (versionName == null || versionName.length() <= 0) { return ""; } } catch (Exception e) { Log.e("VersionInfo", "Exception", e); } return versionName;}打印的log
05-18 09:03:17.200 31512-31512/com.hxzh.uniwill.lingjian D/versionName:---1.0.5: versioncode:---5
有一点需要注意,获取的版本号是build.gradle里的
2.通过上面的方法获取到版本名(也就是1.0.5)之后联网获取服务器存的版本名
private String oldVersion,NewVersion,versionmsg,url;private TextView tvmsg,tvcode;
oldVersion = getAppVersionName(Activity_login.this);
OkHttpUtils.get(Http_Api.URL_UpdataVersion) .params("ostype","1") .execute(new StringCallback() { @Override public void onSuccess(String s, Call call, Response response) { updataVserion = JsonUtil.parseJsonToBean(s,Data_updataVserion.class); NewVersion = updataVserion.getVersion(); versionmsg = updataVserion.getMess(); url = updataVserion.getAddress(); String[] n = versionmsg.split("n"); versionmsg = n[0]+"\n"+n[1]+"\n"+n[2]; if (!NewVersion.equals(oldVersion)){ updataDialog.show(); tvmsg = (TextView) updataDialog.findViewById(R.id.updataversion_msg); tvcode = (TextView) updataDialog.findViewById(R.id.updataversioncode); tvcode.setText(NewVersion); tvmsg.setText(versionmsg); updataDialog.setOnCenterItemClickListener(new UpdataDialog.OnCenterItemClickListener() { @Override public void OnCenterItemClick(UpdataDialog dialog, View view) { switch (view.getId()){ case R.id.dialog_sure: Intent intent= new Intent(); intent.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse(url); intent.setData(content_url); startActivity(intent); break; } } }); } } });我这里服务器返回的json 字段
content : {"address":"http://123.56.97.229/pdownload/LingJian.apk","mess":"1.加入了自动更新功能,可以点击按钮下载最新apk-2.修复了一些bug-3.不用扫描下载了","version":"1.0.6"}
3.其实就是每次有新版本就让服务器修改字段就好了,原理非常简单,我获取到json字段进行判断,不一致就提示更新,然后调用系统自带浏览器下载apk
Intent intent= new Intent();intent.setAction("android.intent.action.VIEW");Uri content_url = Uri.parse(url);intent.setData(content_url);startActivity(intent);
dialog大家可以自己随便定义,我是看网易云的小火箭太好看了,于是求美工,哦不是,是设计师姐姐帮我做了个背景
在这里贴上图片素材和代码吧
小火箭的png图片就是dialog的背景
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/roctet_bg" android:gravity="center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/updataversion_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="180dp" android:text="@string/updataversion" android:textColor="@color/black" android:textSize="25sp"/> <TextView android:id="@+id/updataversioncode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/updatacode" android:textColor="@color/black" android:textSize="16sp" android:layout_marginBottom="20dp"/> <TextView android:id="@+id/updataversion_msg" android:paddingLeft="5dp" android:paddingRight="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_width="wrap_content" android:layout_height="80dp" android:text="@string/updatamsg" android:textColor="@color/black_hehe" android:textSize="15sp" /> <!--<View--> <!--android:layout_width="match_parent"--> <!--android:layout_height="1dp"--> <!--android:background="#cecece" />--> <LinearLayout android:id="@+id/dialog_sure" android:clickable="true" android:layout_marginTop="10dp" android:layout_width="250dp" android:layout_height="50dp" android:orientation="horizontal" android:background="@drawable/updataversionbut_bg"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="@string/updatasuer" android:textColor="@color/white" android:textSize="22sp" /> <!--<View--> <!--android:layout_width="1dp"--> <!--android:layout_height="match_parent"--> <!--android:background="#cecece" />--> <!--<TextView--> <!--android:id="@+id/dialog_cancel"--> <!--android:layout_width="0dp"--> <!--android:layout_height="match_parent"--> <!--android:layout_weight="1"--> <!--android:gravity="center"--> <!--android:background="@color/updataversionbut"--> <!--android:text="@string/updatano"--> <!--android:textColor="@color/white"--> <!--android:textSize="20sp" />--> </LinearLayout></LinearLayout>dialog代码
package com.hxzh.uniwill.lingjian.View;import android.app.Activity;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.Display;import android.view.Gravity;import android.view.View;import android.view.Window;import android.view.WindowManager;import com.hxzh.uniwill.lingjian.R;/** * @author 庞世宇 * @describe 自定义居中弹出dialog */public class UpdataDialog extends Dialog implements View.OnClickListener { private Context context; private int layoutResID; /** * 要监听的控件id */ private int[] listenedItems; private OnCenterItemClickListener listener; public UpdataDialog(Context context, int layoutResID, int[] listenedItems) { super(context, R.style.MyDialog); this.context = context; this.layoutResID = layoutResID; this.listenedItems = listenedItems; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.setGravity(Gravity.CENTER); // 此处可以设置dialog显示的位置为居中 window.setWindowAnimations(R.style.bottom_menu_animation); // 添加动画效果 setContentView(layoutResID); // 宽度全屏 WindowManager windowManager = ((Activity) context).getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = display.getWidth()*4/5; // 设置dialog宽度为屏幕的4/5 getWindow().setAttributes(lp); // 点击Dialog外部消失 setCanceledOnTouchOutside(true); for (int id : listenedItems) { findViewById(id).setOnClickListener(this); } } public interface OnCenterItemClickListener { void OnCenterItemClick(UpdataDialog dialog, View view); } public void setOnCenterItemClickListener(OnCenterItemClickListener listener) { this.listener = listener; } @Override public void onClick(View view) { dismiss(); listener.OnCenterItemClick(this, view); }}
修改提示文本信息,升级了哪些功能啥的
tvmsg = (TextView) updataDialog.findViewById(R.id.updataversion_msg);tvcode = (TextView) updataDialog.findViewById(R.id.updataversioncode);
tvmsg.setText(versionmsg);
使用很简单:new对象,里面是布局和点击事件的id
updataDialog = new UpdataDialog(Activity_login.this,R.layout.dialog_updataversion, new int[]{R.id.dialog_sure});
<style name="MyDialog" parent="android:style/Theme.Dialog"> <!--背景颜色及和透明程度--> <item name="android:windowBackground">@android:color/transparent</item> <!--是否去除标题 --> <item name="android:windowNoTitle">true</item> <!--是否去除边框--> <item name="android:windowFrame">@null</item> <!--是否浮现在activity之上--> <item name="android:windowIsFloating">true</item> <!--是否模糊--> <item name="android:backgroundDimEnabled">false</item> <!--是否半透明--> <item name="android:windowIsTranslucent">true</item> <item name="android:background">#00000000</item></style>
<!-- dialog底部弹出菜单动画 --><style name="bottom_menu_animation" parent="android:Animation"> <item name="@android:windowEnterAnimation">@anim/bottom_menu_enter</item> <item name="@android:windowExitAnimation">@anim/bottom_menu_exit</item></style>这是动画样式
最后,希望可以对大家有些帮助,感谢阅读
下载地址 https://github.com/PangHaHa12138/RocketUpdata
- 安卓开发---仿网易云小火箭dialog一个简单的自动更新弹窗以及下载apk
- 自动更新--下载apk以及提示对话框的实现(3)
- 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(一)
- 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二)
- 高仿QQ的手机管家的小火箭加速
- 高仿QQ的手机管家的小火箭加速
- Android仿腾讯手机管家实现桌面悬浮窗小火箭发射的动画效果
- 下载安卓APK
- 仿网易云音乐收藏的小动画
- 自动更新的一个小问题
- 安卓简单开发-几种dialog创建和使用
- 安卓开发将打包好的Apk放到iis服务上进行下载及更新
- android仿腾讯小火箭案例
- 简单实现安卓app自动更新功能
- 安卓apk下载安装
- 仿网易图片中心的一个模块
- 安卓apk自动更新提示解析包失败
- 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
- hibernate 学习细节
- 二叉搜索树的判断 leetcode原题
- 世界级机器学习专家都有谁?有关 AI 你不能不知道的6个人物
- 使用Timer+servletListener实现web服务的任务调度
- 计算机视觉——SIFT算法之高斯金字塔
- 安卓开发---仿网易云小火箭dialog一个简单的自动更新弹窗以及下载apk
- Intellij IDEA17 关于maven-generator插件,无法在右侧显示的问题
- select和radio常用操作
- <link>标签的属性
- 虚拟机安装的系统界面很大的解决办法
- Android开发之---有关图片压缩
- CMD命令工具--Windows下使用tree命令生成目录
- 汽车品牌及产品信息汇总
- OKHttp学习步骤