Android 实现通知栏通知APP版本更新

前言:

我们似乎在做什么apk,都需要去做更新这个功能,那怎么去做这个功能才好呢,那当然在做的时候当然回去百度一下(除非是大神)。想我这个种没做一个比较好玩的功能的时候,第一步就是去百度大家的做法,想法。怎么去实现、怎么完成。怎样比较好看,和健壮性比较好。

一直一来自己都是小白,所以很明白小白的心情,自己写博客也会写的非常详细,希望大神勿喷。也希望小白能从中得到学习。

好了不啰嗦,马上开始我们的代码体验.

为了不浪费大家的时间,我们先开看一下我们的实现效果先.如果这个效果是你想要的.就可以仔细阅读一下本篇文章啦.

正文:

这个自动检测升级Apk的功能,相信每个应用都会使用到。这里也提供给大家使用,直接copy过去就能使用了。

不需要做过多的调整。 

其中使用Service、BroadcastReceiver、OkHttp下载、Gson解析json、NotificationManager、Notification 运用的知识也挺多的,也可以供大家参考、学习使用。

          源码下载:点击打开链接  

注意:博主使用的是Tomcat服务器,我们将这些数据下载下来放在Tomcat服务上就可以测试了

好了接下在直接进入代码主题:

      1、第一步先添加入所需要的第三方依赖

      2、模拟写好要去读取的json数据(这里可以是xml数据,根据自己喜欢)

update.json

{  
    //app名字  
    appname:"UpdateApk",  
    //服务器版本号  
    serverVersion:2,  
    //是否强制更新  true为强制升级,false为正常状态  
    whetherForce:false,  
    //apk下载地址  
    updateurl:"http://127.0.0.1:8080/UpdateApk.apk",  
    //版本的更新的描述  
    upgradeinfo:"有新功能哦!要不要尝试一下"  
  
}


3、写好对应的Bean类   

UpdateInfo.java

public class UpdateInfo {

    //app名字
    private String appname;
    //服务器版本
    private int serverVersion;
    //强制升级
    private boolean whetherForce;
    //app最新版本地址
    private String updateurl;
    //升级信息
    private String upgradeinfo;

    /**
     * 都生成对于的set and get 方法
     * 这里我就不把set and get 方法贴出来了,读者注意去生成就好了
     */
    
}

4、单独创建一个java类来存储存放json数据的连接(方便管理)

HttpApi.java

/**
 * 这里存放我们要去读取的json数据连接
 */
public class HttpApi {
    public static String updateUrl = "http://127.0.0.1:8080/updateapk.json";
}

5、创建MyApplication.java 去继承 Application。需要一进去APP就去请求网络进行APP版本信息比配

/**
 * 在程序进入的时候我们就去读取网络上APK的信息
 * Created by WL-鬼 on 2017/5/13.
 */

public class MyApplication extends Application {

    //先在这创建好上下文环境,可能会使用到,这里为个人习惯,需要使用的时候在创建也是可以的
    private static Context mContext;
    //读取到的bean对象
    private static UpdateInfo mUpdateInfo;

    public static final String UPDATE_ACTION = "UPDATE_INFO";


    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this.getApplicationContext();

        getServiceUpdateInfo(false);

    }

    /**
     * 获取服务器上的更新信息
     * @param isClick  参数一:是否为手动点击的检测更新
     * @return         获取到的UpdateInfo对象
     */
    public static UpdateInfo getServiceUpdateInfo(final boolean isClick){
        mUpdateInfo = new UpdateInfo();
        new Runnable() {
            @Override
            public void run() {
                OkHttpClient mOkHttpClient = new OkHttpClient();
                Request mRequest = new Request.Builder().url(HttpApi.updateUrl).build();

                Call mCall = mOkHttpClient.newCall(mRequest);

                Callback callback = new Callback()  {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        String r = e.toString();
                        Log.d("onFailure",r);
                    }

                    @Override
                    public void onResponse(Call call, Response response) {
                        Log.d("MyApplication--onResponse",response.code()+"");
                        try {
                            //只有服务器已成功处理了请求,才继续处理我们接下来想处理的事情
                            if (response.code() == 200){
                                String infoStr = response.body().string();
                                Log.d("onResponse",infoStr);
                                Gson mGson = new Gson();
                                mUpdateInfo = mGson.fromJson(infoStr,UpdateInfo.class);
                                //创建Intent
                                Intent intent = new Intent(UPDATE_ACTION);
                                if (isClick){
                                    intent.putExtra("isclick",isClick);
                                }
                                //开启广播
                                mContext.sendBroadcast(intent);
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                };
                mCall.enqueue(callback);
            }
        }.run();
        return mUpdateInfo;
    }

    public static UpdateInfo getmUpdateInfo() {
        return mUpdateInfo;
    }

    public static Context getContext() {
        return mContext;
    }
}

6、去创建 UpdateReceiver 继承 BroadcastReceiver 并且需要注册(这里可以使用动态注册和静态注册)(我这里实现了静态注册)

6.1、在UpdateReceiver中所需要使用到的布局文件

download_promp.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="8dp"
    android:id="@+id/download_notification_root"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/download_promp_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/download_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/download_promp_info"
                android:paddingTop="8dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>

</LinearLayout>

6.2,这里插入写的一个工具类

MyUtils.java

public class MyUtils {

    //放在下载更新包的文件夹
    public static String update
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WL-鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值