00:00
好,那下面呢,我们就按照刚才说的这样一个流程呢,开始去完成这个联网更新,这就一气呵成了哈,这里边这个东西呢,可能会代码量稍微多一点,这个流程呢,你得分析清楚,这得注意了啊,你别别现在又迷迷糊糊又睡着了啊。嗯,一醒的时候呢,发现已经连成了是吧,嗯,好,开始来写咱们这个welcome的话呢,当初没有让他去继承一贝itty,那其实主要原因就是因为我我在这写了几行代码啊,在这个set content view之前了,那这倒没啥事啊,那主要呢,我们现在开始从哪做一个入口进来。我一登录猎鹰的时候呢,就开启这个万面提提了,很自然而然的就调往科方法,那我们就按照这个顺序往下走啊,这呢是提供动画,那你是不是也就在这块位置去让他去联网一下啊,这呢我们就开始啊呃联网,然后呢呃更新这个啊应用这呢我们就可以简单写个叫update APK。嗯,这样一个吧。
01:01
啊,具体这样一个操作啊。联网更新应用的这样一个操作,好,那那这样呢,我们al一下enter,我就创建一个这个方法。来创建这个方法啊,那创建的方法刚才我们说了,首先要做个事呢。咖没网对吧,嗯,首先我们做的第一个事情判断啊是否啊这个。判断这个手机哈,是否可以联网。嗯,哎,这呢,我们给它封装成一个方法,直接呢,我叫is connect。来把这个方法呢,我们给它创建一下。那这样一下啊,那如果有网那我们怎么着,如果没网怎么着,这就相当于是有两种情况了啊,下边呢,就具体来写一下,那这个呢是有网。啊,或者你在这加个非,这就没有网啊,Else,就是有网。啊,这样两种不同的做法啊。那没有移动网络。
02:02
啊,有这个啊,移动网络。嗯,这里边呢,就涉及到功能啊,我们得能够调用相关的API,判断一下这个手机这个你是不是有没有开这个移动网络,哎,这个功能的话呢,实际上大家又可以把它看成是一个功能平台了。然后呢,我们这呢,直接呢,就可以把这个呢粘过来啊。啊,在这个里边。在这啊,CTRLC一下。啊,这个呢,实际上是咱们以前讲这个呃,手机位的时候呢,说过这样的这个相关的一些PI啊,手机位的话呢,其实就是一个本地的一个应用啊,啊跟联网的个操作呢,比较少。啊,主要的里边就是练这个系统提供的哪些一些相互之间我们不要些什么这样的一些功能啊,但现在这个应用的话呢,基本上大家注意的话,工作作用不太大啊,所以这个应用呢,我们就不讲了。行,这块具体的实现的话呢,其实你也不用看的太细了啊,比如我涉及到调用系统的这个服务了啊,连接的这个服务啊,通过这个服务呢,又调这个方法返回一个关于联网的这样一个对象啊,这个对象的话呢,我们再调它这个方法,看看它是不是连成。
03:12
这个呢,你也不用去可以记了,就咱原来讲的这就属于一个功能性的代码啊,你知道通过这个方法就能做这个事儿。就行啊,哎,判断是不是联网返回一个波类型的,那我们这呢,就接收一下这个波型,那如果没有网络。没有网络,刚才我们说了是不是直接进入主界面。哎,进入主界面,咱们这个好像默认还开了一个动画啊,那动画呢,就是你三秒钟以后自动就进入主界面了,这个事儿是不是我们就算了,就别让他在这写了。对吧,我们自己是不是就现在不让它自动三秒以后直接跳过去吧,是我们自己决定什么时候该跳。啊,所以就别在这写这个了哈,动画你该启动还启动啊,那我们回过来重新来判断哈,说如果没有网络的话呢,我可以先这样先提示用户一下。
04:04
嗯,说当前。啊,没有数据网络或者叫移动数据网络啊。啊,这呢,我们写上一个false,所以这个跟人家服务器开没开没关系啊,就是你本地你没有开那个4G啊3G啊或者WiFi啊,是这个意思,那这样的情况下呢,我们说你得进入主界面了,这呢我们写个方法就叫做通妹。啊,进入主界面啊,那我们把这个方法呢,给它创建一下。那进入主界面的话呢,我们也得考虑到,你得让人家这个动画呢,得差不多能够执行完这个动画呢,有三秒钟。啊,你这块呢,可能很快哈,一下子就判断了没有网,那那你这时候直接来一个start,有点太快了。那这块呢,时间最好能够拖一拖,正好拖够人家这块能执行三秒钟,但你之前的话呢,呃,这些判断呢,也花了点时间,你把那个时间呢,给他抠出去。
05:02
啊,有这样的想法啊,那基于这样想法怎么去写呢?我们可以这样啊,首先呢,一上来在昂辉的这个教这个联网判断的这个方法里边,我一上来呢,就获取系统当前时间。哎,这呢,我们直接调一下system.current time。哎,获取系统当前的这个时间,我叫了start啊。啊,这个呢,我们下边要用啊,所以把它抽成一个属性了,嗯,然后呢,你做这样的判断以后,需要进入主界面了,呃,在这个位置的时候呢,我再记录一下当前的时间。哎,这个单词叫current time。啊,那这两个时间的话呢,显然是有一个差值的,那这个差值的话呢,我们在这做一个计算哈,这我还用last呢,我这叫一个delay time,你看我这个怎么算的啊,哎,我呢先很显然你这个值大一些啊,减去这个呢大的time。
06:07
剪完以后的话呢,就相当于是我执行到这儿花了多长时间。那总共呢,我们是希望呢,他三秒钟以后进入主界面,那现在已经是不是执行了这么长时间了,哎,那我这儿哎,对拿这个3000。减去一下它们两个的一个差值是不是就可以了?比如说让你这个值算出来是一秒就1000,那说明直接到这花了一秒钟,然后我还差两秒钟,所以呢,我就是两秒钟以后再去进入主界面,所以这有个delay time啊,延迟时间,当然了,你这个delay time有可能是不是是个负数啊。就是你执行到这时候放的时间有点长了。那这个呢,Delay time,如果你是小于零的。怎么啦?哎,我就把它是不是制成零就行。那其实你就相当于是个即时消息了是吧?哎,然后在这个位置的时候呢,咱们是不是就可以发送一个延迟消息啊,啊这个哈德你看提前我那时候咱们用的时候啊,都造好了这个呢,因为我们要使用它的另外一种方式处理啊,就写这了啊,然后在这个位置。
07:08
来,我们是用这个handle a message在这里边去写啊。啊,那在这个情况下。啊,To make进来这个情况下呢,我们就可以使用这个handler,哎,我去那send一个I message delete。啊,发这个就行啊,这呢指明一下,嗯,这呢,我们表示的进入的是这个主界面啊。啊,这个呢是to啊may,这我们就这样写一下,然后呢,这的时间呢,就是一个地看。这样,然后把这呢,我们给它来生成这样一个长量,是个E行,那在这里边呢,我们得处理这样的消息了。message.what。啊,然后case,那就是这个一。那进入这个主界面的一个操作。啊,进入主页面这个操作,那我们就直接这呢,我们也没继成那个base了啊,所以直接呢,就是start来第一用一个哎,In。
08:10
嗯,这呢,先写你自己。马曼天1.2Z4。然后呢,是我们的这个妹。一。对吧,那这样的话呢,我们相当于就是能够进入这样的一个主界面了。啊,这就可以了哈,行,那还回过来。这个再拽回来了啊,相当于刚才我们这个路径里边呢,做的是这个事儿。啊,那现在有可能还这样往前走。嗯,回到这儿。啊,回到这个位置了啊。可能是答复一下,刚才呢是没有移动网络的时候呢,直接呢就进入主界面了,那如果有网。那有网的话呢,我们下边该做什么了。是不是该联网获取服务器的那个版本了,联网。
09:03
啊,获取。服务器的这个,嗯,最新版本数据。啊,这个数据呢,还是以接算的方式传给我们的啊,那这里边呢,我们还是使用咱们,呃,自始至终都在用的啊think X client。哎,是不看啊,那我拿着这个plant,我们再去做一个联网操作,或者用个POS吧,POS里边呢,又需要个URL指明呢,你要连的是哪个路径啊,这个我们是APP ne coniggu,之前也写好的啊,Update。那这呢,我们直接访问的就是服务器这样的一个接散数据啊,也就是对应我们这里边儿的。嗯,在这。啊,在这呢啊。服务器呢,我这放的这个版本呢,是1.2。啊,服务器放置1.2,那我们本地这个呢,看一眼。这个版本号在哪?
10:02
版本号是不是这1.0啊。对吧,这是咱们本地的啊,然后人家那1.2显然不一样,估计那个大,哎,所以我们这呢,是需要有个更新的啊嗯,行回过来,呃,这呢,我们指定要连的是它,那就是URL逗号。需要参数吗?那你把本地的这个号不得传过去吗?用了不用,你是把服务器那个传过来是吧,在本地判断啊,哎,然后接下来呢,直接我们就用一个这个,哎,响应就可以了啊ATP response看到这。分成两种情况,Success。嗯,啊对这好这样两种情况,这样呢,表示联网成功的啊,相当于我们正确的把呃,这个阶层字符串呢,给我们返回回来了。
11:00
然后这个呢,表示就是失败的情况,那先写一下这个失败吧。失败的话呢,其实就代表着你这时候嗯,下载这个数据给失败了是吧,下载数据失败了,这不是不是下载数据失败了,就相当于你去连服务器的时候,如果服务器根本就没在服务器关了。那是不是就跑到这了啊,那这呢,我们就可以写一下啊u.to一下。那联网。啊,请求数据失败。来这呢,来一个。哎,那你都失败了干什么呀?是不是该通了?对吧,哎,进入界面啊,这时候你再判断一下这个底类是多少,然后再过去。啊啊,这这种情况,然后success,那success就成功了,那成功我就可以,我解析一下你这个结算数据。接点数据呢,我们还是使用这个fast杰森第二,哎,Pass一下,这其实直接就是一个接森对象啊,那我们本地是不是最好拿个对象跟它对应一下啊。
12:08
哎,我们这就可以去创建一个。那在我们这个B里边。哎,我就造一个,比如我们就叫做update啊in。那在这呢,我们去提供这样的几个属性啊,属性的话方便我们调用,我就不私有化属性直接改善方法了啊,我直接呢就写成一个public的属性。哎,词缀类型的,你就按照我们拿到这个杰森的啊,这样的一个K哈去写就行。嗯,这个呢,是具体的版本细节。在更新的一个细节。你看这个呢,就是嗯。这个最新版本的一个路径啊。
13:00
保存路径啊,这个呢,是服务器的一个最新版本。那版边这个值好,这样的话呢,我们就搞定了啊这个了以后呢,我们回过来,哎,接点我们去pass一下object,哎,把我们这个content放进来,然后接着呢,把我们这个update。In class也放进来。好,这样的话呢,我们就得到一个阿的因法尔对象,这个对象呢,我们后边用啊,我们把它抽出来,把两个属性。行,哎,得到它呢,还是挺重要的哈,那接着想,我们现在得到这个数据了。下面该干什么呢?嗯,你是不是该比较一下,说这个版本跟我们本地的这个版本它俩一样不一样是吧?哎,就是相当于该该这个事了啊,这个事我们在这儿可以讲一下啊,我直接hand到这讲。
14:00
那我去send一个MT message吧。这个就不用延时了,这当然越快越好了,这个咱们可以写一下,叫嗯,当no这个version了。30。啊,成功的。嗯,然后把它呢,我们在生成一个常量,这个呢叫二表示呢,就是我们下载一下服务器这个最新版本,这个数据呢,成功了啊CTRLCL一下。这次这样。啊,接着在这写啊,嗯,成功了,刚才我们说的,那这个时候呢,我们就应该做这个事情,说获取啊,这个我们应用。哎,当或者叫当前应用。的这个版本信息。哎,然后呢,跟服务器呢,我们下载过来的,并且封装在我们这个update INF这个对象里的。做个比较。行,那接下来呢,得获取本地的这个版本信息,我们这呢,再封装成一个方法。
15:05
啊叫get一个。啊,这个呢,仍然跟我们说是不是联网一样,当做一个功能性代码去写就可以了。好找到我们的这个位置。啊,这有这个改过身,直接把它呢粘过来。那这个呢,我们就站到后边的一个位置上可以啊,我们放这吧。啊,这个呢,首先呢,成为一个字符串表示呢,叫位置版本,还是获取我们这个包的管理器啊,获取这个package的信息,找到我们当前这个应用。嗯,然后呢,直接拿到他的这个version name,它呢就是我们当前的版本。哎,在我们这个问题当中就是1.0。刚才我们看到这里边1.0。嗯。得到这个版本以后,先接收一下。
16:00
哎,这是个他啊,嗯,得到这个事以后呢,刚才说了就比较一下。啊,就比较一下,实际上除了比较之外的话呢,我们这个欢迎界面啊,当然咱们写的时候呢,是不是首页还显示了一下这个版本。看,点开。这是不是写了1.1。这1.1实际上是咱们在那个设置布局的时候,是不是写死的呀,那你现在咱们针对这个当前问题是不是1.0啊。那1.0的相对来讲,你是不是应该更新一下,那我们就得找到咱们的这个布局文件。看一下咱们当时设置的这样一个属性。在这儿呢?那这咱们写的一点,这是写死的啊,我们应该动态的去获取,没有ID,我们给个ID。来角过程啊,保存一下,把它关掉啊,回到我们的这个加载的这个位置上奥,使用S。
17:00
来把这个呢加进来。好加进来啊嗯,加进来以后的话呢,在这呢,我们实际上是做两个事儿哈,首先呢,得去更新一下这个页面来显示的版本信息。哎,就刚才我们这个TV啊,Welcome这个version,假下一个test就写成一个version。啊,那如果你没有获取到本地写成未知版本,那这也写成未知版本。啊,这是它啊另外一项一方面呢,就是比较一下服务器。啊,获取的这个最新的这个版本啊,跟这个本地的这个,或者跟这个本应用的。版本是否一致?这个这我直接就写衣了啊呃,当前呢是version,那肯定也不会闹的啊,就直接掉ES,哎,然后将我们这个叫update in for点一个version比较一下。
18:03
看看他俩呢,是不是e cos,那有两种情况啊,一种呢是e cos的,一种是不cos,所以呢分成这个和这个。这个呢表示版本一样,版本一样,你可以UI点做一个tot说嗯,已经是啊最新版本。或者当前应用啊。那已经是最新版本了,这个呢,直接就放一下,接着呢。是呀。哎,已经是版本了,那你就直接呢进入主界面了。啊,看下你这个延迟时间啊,进入主界面好,那如果走到这了,那说明不是最新应用怎么办呀。是不是该diallo了,得提示一下啊,就别着急下载了,所以这呢,我们就写个利用一个D。啊,这样子了啊,嗯,那这个位置。
19:00
嗯,就welcome他点这。啊,三个title,接着我们看一下这个都需要写哪些信息哈。嗯,这是页面。这是电脑啊,下载最新版本。嗯,然后这个位置呢,我们写一个。哎,这个message呢,就是你让我下载,为啥让我下载啊,你得告诉我最新版本的一些情况啊,所以我们这呢,就把update iner点啊D,就是当时服务器里边存在这个信息啊,给显示一下啊,这个信息就是呈现在我们的这个位置上。啊,就相当于这个版本的一些更新的一些情况啊,我们可以在这呢写出来,嗯。这我还记得印象最深刻的啊,就是一般的咱们装应用的话呢,或者我一般我装应用的时候,我都会看一下说呃,当前版本是这个,就是在应用市场里边这个新版本,然后更新啊,为啥要更新,他往往会写很多的东西了。
20:11
看他到底写啥啊,当时印象比较深刻的就是那个。但是还用苹果手机啊,苹果不是那时候出了一个Apple watch吗?手表是吧,手表,然后看一个什么更新的那个搜狐视频。搜狐视频啊,当然呢,是拿这个手机看的这个appstore啊,然后呢,搜狐视频让我去更新了,然后下边呢,写的这个更新条目里边就写了三条,中间这一条写的非常明确,说来添加对Apple watch的支持。看完以后我都惊呆了。他是想让我在手表,手表上是不是看那搜狐视频呢。就那么点一个空间是吧。有的时候这个应用也挺奇葩的哈,你看现在这个手表呢,苹果卖的不太好,然后那个摩托罗拉不是moto也是个手表嘛,360是吧。
21:04
那个手表像说他也不早了,就现在整个手表这块呢,市场不太好啊。嗯。这手我觉得还行。啊,手环那个这个这个跟手表至少这个功能不重叠啊。那就是手环啊,手表的话呢,跟手机的功能基本上都是一致的,什么都一样啊。行,这是我们这个message,然后接下来呢,有两个button,一个呢要确定一个要取消,取消呢表示用户不想下载,那你应该有一个回调进入主界面的,所以这这再扭一下啊on click。嗯,人家就想直接进入主界面了啊,我取消了,那直接呢,是不是就重一下。哎,就过去就行啊,那确定确定呢,表示用户现在呢想下载,想下载那就下载呗。呃,下载。这个呃,服务器保存的应用数据。
22:06
行,这呢,我们就具体写一个啊叫当啊load。啊,我们这个选的AK啊。嗯,好,然后呢,我们就out,写上创建一下。嗯。嗯,这个呢,就需要具体的联网下载这个数据了。那联网下来这个数据想一想啊,我们这里边儿呢,就可以给用户呢,呈现一个。这是什么呀?如。Bar bar带老。Bug diallo到底造哪个?你怎么区分啊?嗯,怎么选。尤其你咋选这个,就是到底是找我爸还是找我咱俩老板。哎,对啊,就这个半的话呢,它本身就存在你的这个布局里边。
23:01
这个那种叫bar啊,Diallogue呢是diallo不都是全出来的一个嘛,是吧,你这个后边背景welcome不都写死了吗?你怎么可能去往后边布局里边给他塞一个bar呢,是吧?哎,所以这就是diallo啊,就是bar呢都是写在你的布局文件里面,Diallo呢是你想什么时候造一个显示一下,你就给他造一个,让他选补出来就行啊行,那这需要呢,相应的一个dialo。哎,同时的话呢,我们得考虑保存到哪,所以这呢,其实就是我们在讲安卓基础的时候,其实说过这样的一个应用练习啊。我们需要有这样的两个信息,Private progress dialogue,嗯,Dialogue,这是一个哈,然后呢,我还得考虑把这个文件呢存在哪。APK的一个。行,那首先下载先别着急造个分线程啊嗯,你先把这个在主线程里边需要做的事呢,先做一下啊,首先这个单到。呃,水平的一个diallo。
24:01
直接呢,我们去new的方式去创建这样一个this。啊,然后呢,Dialogue指定它的一个still。哎,Still的一个2ENTAL啊水平显示这样呢,让它做一个收啊,这是这个啊,那需要准备的第一个工作,那相当于我们这个叫初始化。啊,水平机动强。嗯,待。这是一个,然后另外的话呢,你得指明我这个数据呢,联网以后数据下载到哪,就是我们这个APK file呢,应该初始化啊。啊,数据要保存的位置。嗯,主要呢,就是需要把这个APK file呢,直接指明一下啊,保存在哪这个呢,就跟咱们前面写这个保存数据这个一样啊。嗯,比如我们保存那个图片,当时啊用户这个头像啊,当时我们是这样写的,首先呢,我们先判断一下啊,这个environment。
25:06
嗯,点这个get eternal story state,点啊equals environment.media wanted,就是我们呢,先考虑啊ID卡的这个路径一是吧。哎,那如果说你处于挂载状态,我呢,我们可以这样啊,先在外边我们造好一个叫。嗯。对点。哎,然后falses点就等于这次点get external啊,Falses点这样。诶,获取的是ID卡的一个路径一,啊,如果呢,没有挂载。这按就这次要get一下是不是。啊,那在这个基础之上,我们的APK file呢,就等于new一个file,在我们本身这个基础之上呢,起个名字就叫update.apk。
26:03
就起个名就行啊。好,这样的话呢,我们就能够提供这样的一个文件了,在接下来。是不是该启动一个分线程联网下载数据了?对吧,来开始做这个事情了啊。行,这个我们稍微把它停一下,这个呢有点长哈,先到这一下。
我来说两句