00:00
好,接下来呢,我们来讲解这个全局监听啊联系人的变化,前面呢啊都是为了这个全局监听这个联系人变化做了准备啊,之前呢,我们是做这个地方啊,发送方已经做完了,发送添加好友这个联系人一点击啊发送这边呢就能接受到啊这个联系人的变化,这是怎么实现的呢?是这样的。啊,这是。这个是环线服务器啊,又画一下这些图啊,这个图反复的画,这边呢是B。我这边呢,一发送这个好友邀请啊,先到环境服务器,关进服务器呢,就通知这个B说A要添加你为好友啊,把这个消息推送给BB呢,如果啊说诶这个妹妹还不错,那我就添加他为好友,那我就告诉这环心服器说我添加他了啊之后呢,环西服器再告诉这个A,他添加成功了啊就是这么一个过程,那好,接下来呢,我们要注册一个全局的监听啊为有的同学要问为啥要注册一个全局的监听呢?哎,我为什么不在每一个模块里去注册监听呢?
01:10
统一监听之后啊,这样呢有个好处,我监听完这个消息之后,哎,我统一向下去分发,分发到每个模块。全局就一个入口啊,要不然你要是每个模块都去注册这个监听,那么每一个模块都要重复的去写一遍代码啊,A这个模块也要写一遍,B类模块也要写一遍,C类模块还要写一遍。啊,这个注册的过程,所以说呢,全集统一注册一遍,好,那我们来写下代码。啊,既然是全局写一遍啊,那么而且是数据,那么一定是在这个模型层中去建立,那么在这里呢,建一个类。Eve啊,事件的监听,LST一样啊,监听的类。全局事件。
02:07
监听啊,在这里面呢,首先啊,定义一个构造方法,Out shift加S,这里面呢,需要传递过来一个上下文,上下文啊,介绍一下这上下文contest m contest。接收一下啊,那接下来呢,就要注册一个。联系人变化的监听啊,接收服务器给你推送过来的联系人变化的消息。那么既然是这个环线服务器给你推过来的,那你这边用的就一定是环线服务器的方法,Get em.get instance点。啊,既然是联系人,那么就调的是联系人的管理者,然后呢,第2SET contest,啊contest这里面呢,需要一个联系人变化的一个啊监听我们这里来一个em con。
03:10
Ad listener定义这么一个方法,二加回车啊,创建一下这个类。啊,我给它拿到上面,让它拿到下面来,因为它比较长。然后呢,有一个这个对象em这里面呢,啊实现了好多方法,一个方法两个方法三个四个啊五个,那这五个方法分别都是做什么的呢?啊给大家一一解释一下。第一个联系人添加啊,这个方法是联系人增加后执行的。方法啊,就是这个接下来呢,这个是联系人delete啊是说明联系人啊被删有删除了。
04:05
联系人。删除后执行的方法。接下来这个呢,啊是联系人啊,接收到新的邀请,就是接收到联系人新的邀请。接受的联系人的新邀请,就是别人邀请你啊。加为好友啊,除会执行这个方法,给你发送了一个好友邀请的消息啊,这个呢是联系人同意了邀请,就是你发出去好友邀请之后,别人同意了你的邀请,就可以说别人同意了你的好友邀请。直白一点啊,这个呢,是别人拒绝了你的好友邀请,拒绝来你的好友邀请。
05:06
不是因为你长得丑啊,他拒绝你啊,啊还有其他原因是吧?啊来看一下这个联系人增加后要执行的方法啊,那么联系人增加之后我要执行什么事情呢?大家想一想。联系人发生了变化,联系人发生了变化,我的本地本地数据库啊,存储联系人的是不是叫。进行更新的,所以说呢,我们要调一个数据库更新啊,数据库更新完之后,你这是总的这个。哎,没话。啊整的全监听,他监听完之后,你是要把这个监听得到的数据联系人这个啊。发生了变化,这个事儿是要发出去啊,要发一个广播啊,发给需要接听的人。谁需要监听,哎,谁就注册它,我们这里呢,只负责发送,那就是发送联系人电话的广播,就说啊这么两件事情,首先你的数据库要更新,那么怎么更新呢?你既然是数据的变化,那么一定要是模型成这个类啊,model.get.get DB啊DB里面的哪一个呢?
06:26
具体的是联系人的do,它这里面需要调哪个方法呢?Save你不增加了吗?增加了我这里就调的是save方法。那这个方法这里面有两个参数,第一个是优质。那user我这里目前没有这个user啊,别忘了他他这里传行参数它是谁呢?它是环线ID。啊,环线ID,那么有了环线ID,我要想得到这个user不就so easy吗?Uz份将这个环线ID传进去,这样是不是就是创建了一个啊用户啊,啊,也就是一个联系人。
07:02
好之后呢,还有一个参数,它是否是联系人啊,这里来一个是联系人就OK了啊,这个地方一定要注意啊,我是通过环信这个ID啊,创建了这么一个用户的信息,如果你是要自己有自己的服务器的话,你要通过这个环信ID去服务器去拿到当前的这个联系人的所有的信息啊,目前呢,这是因为我没有服务器,所以呢,这地方直接就用这个对象了。啊,这个地方大家要理解一下,好,接下来呢,我就发送这个联系人电话的广播啊,发广播啊,大家以前用过什么方法。这里呢,我给大家用一个啊,用这种方法首先呢,创建一个发送广播的管理者啊对象,那怎么获取呢?Local broadcast manager啊,本地广播的管理者对象,然后呢,Get。
08:00
获取它的实例对象,传进来一个上下文。Alt加回车,这样呢,我们就拿到了一个管理者LBM啊简写。拿它,把它变成全局的out shift加F。然后呢,拿了对象。发送广播,Dear sand broadcast。里面需要一个意图,那我就来一个意图intent,发生什么样一个意图呢?啊,我先定义这么一个类常量类constant cons点点什么呢?联系人con。N contest con contest change。An。G联系人变化的这么一个广播,首先呢,我需要创建这么一个类啊,在哪里创建呢?
09:02
在这个下面。建一个全局的成立。定一下全局的常量。长亮。所有的全量啊,我都可以放到这个这里面来。之后呢,在这个地方out加回车啊,生成一个局部变量,这里面呢,选择这个实际类型啊来一个。联系人啊什么的。这个是发送联系人电话的广播。啊,这是这个接下来呢啊,再回到这个删除这个方法啊,添加方法就搞定了,接下来删除啊联系人,那么这里同样大家考虑啊,联系人发生了变化。
10:05
我哪里还要发生变化?肯定还是数据库必须要跟着去变化,从本地数据库中删除这个联系人。同时呢,你还要发送联系人变化的一个广播,通知大家联系人发生了变化。有需要的人,他就会进行相应的处理,换新ID,好数据库更新,那就是model.get.get DB get contest。啊,D点删除,那么就是delete,根据什么去删呢?根据它的环线ID,好环线ID传进来,这样呢,删除就删除完了啊,联系人删除完了之后,别忘了将他的邀请信息也通通全部删除掉,那就是要调他的邀请信息的管理类,然后呢,Delete。Remove remove通过什么删呢?还是通过环形ID删除邀请信息?
11:07
删除完之后,接下来发送联系人电话的广播跟上面的是一样的。CTRLC。发送联系人变化的广播,这两个方法呢啊,一个是联系人增加,一个是联系人减少啊。下面的方法就是邀请信息相关的啊,方法这个呢,第一个是接收到联系人的新邀请啊,就是别人给你发好发送好友邀请了,那他他就会执行这个方法,那第一个参数呢,其实是环线ID啊,第二参数是原因。Son。就是邀请啊。要加你为好友啊,他为什么要加你好友呢?啊,给你个原因啊,反正你看看这个理由是否合理对吧,让大家想一想。他给你发送过来好友邀请之后,你哪些数据要发生变化?首先要变的就是数据库更新标准信息,这张表里的数据我要进行更新,接下来还有哪个事情要变化呢?
12:15
我也要发送邀请信息变化的广播,发一个他的广播。这两件事就完了吗?还没有完啊,还有一个什么事情呢?还有这个事情,大家看看这个小红点啊,小红点那我先进去啊,推出来,这小红点原来是没有了,然后一发送它是不是就有了这个呢?也是记录这个当前是否有新的邀请信息这么一个状态。啊,这么一个标志位,那么它是有还是没有啊,是否有新的消息,还是没有新的消息,那么这就是一个布尔类型的变量。那么这里面呢,我需要对它进行存储啊,也就是红点的处理。红点的处理,一旦有新的邀请啊,有新的邀请信息变化,那么我这红点呢,就默认要让它啊显示啊,那好一步一步来,首先呢是数据库的更新,那么简单的model。
13:19
model.get.get DB manager点点什么呢?既然是邀请信息,那就是it deal点。啊,你要是啊有新的邀请,那你就是往里添加邀请信息,那么这里需要一个邀请信息,那我就创建一个in vit啊invitation in。好,创建这么一个对象,Out,加回另外一个,因为。那么这个因为啊,我们还没有封装,那么进对他进行进一步的封装,因为in set啊什么呢?啊,我这里是群的还是用户呢。
14:01
很显然是这个用户联系人的嘛,对吧,跟群还没有任何关系,好,那我先就需要封装这个状态原因和用户,我先封装一下这个用户,这里面呢,需要一个。那是我这里有这个环线ID,那要想得到这个user是不是收益这个另外一个user,将这个环线ID传进来啊就搞定了。接下来因为。原因原因这已经给你传过来了啊,直接赋值搞定,接下来因为set这个状态。啊,当前是什么状态呢?是这个状态,Int这个枚举类型的变量点点什么呢。是新的邀请啊,新的邀请状态来看一下,这个呢,表示的是别人给你发送过来的新邀请啊,那么这个状态呢,就置为这个新邀请的状态。新邀请啊好,这个存储数据库这个地方啊,我们就说完了,接下来呢,就是一个红点的变化啊,这个红点。
15:10
啊,是一种状态,那么给它存到哪里呢?存到这个SP里啊,小数据存到SP里还是非常有优势的SPS get。啊,保存,那保存就是save,保存到哪里呢?我要定义一个key啊,这个key是什么呢?啊,Is new in为VI表示啥意思呢?表示你这个是否有新的邀请信息,如果有新的邀请信息,那么这边就要显示这红点,如果没有这邀请信息,那就把红点干掉啊,那这个。进入到这个方法,那就说明有了这个新的消息,那么这边呢,就给一个处。啊,那这个key呢,放在哪呢?Out,加回车生成一下这个局部变量啊,这里面来一个is new啊好,这就搞定了新的邀请。
16:07
啊,现在要记标记啊,标记好这地方搞定之后,退回来之后呢,我还要发送邀请信息变化的一个广播。还是发广播,跟上面的这个联系人电话的广播,这有点类似,只是它的意图不一样了,你发呗,M hello bm.sand。Forecast,然后呢,需要一个意图,那就new,一个意图里面需要一个action action,那这个action是什么呢?这个就是。Invite邀请信息电话。CHAN。
17:01
GE啊升级的。啊,生成一下out加回车。好,这个呢,就是联系人邀请信息。也有信息的变化。这个呢,变成实际啊,不是好联系人邀请信息电话的广播。广播啊广播,好,回头过来。这个是接受到新的邀请,那接下来还有两个方法,就是别人同意了你的好友邀请。你同意了你的好友邀请我要哪些信息变化呢?首先还是有这个数据库,你要进行更新啊,接下来呢,这个红点你也要进行处理啊,表示有新的信信息。
18:01
然后呢,是否要发送广播呢,也要发送广播通知大家啊,有这个消息了。好,那么接下来处理一下数据库更新啊更新一下呗,Model than.get in there get manager点点什么呢?Get in table deal,第二,At invitation,创建一个invitation in VI。In创建这么一个对象,Out加回车创建啊,另一个因为in,然后呢,拿到这个因为进行进一步的封装,还是封装这么前三个啊数据。首先呢,是这个user,那就另有一个u in for,传进来的是谁呢?是环形ID,把它拿过来,根据它去传进。
19:01
好,接下来invitation for set。没有,那不管了,状态,状态是什么状态呢?点是这个邀请被接受了。就你发出的好友邀请啊,别人同意了,就这状态。别人。同意了。你的邀请啊,你的邀请这是这个状态啊,我们就处理完了,接下来呢,是这个红点啊,红点处理,那么还是啊,要保存当前啊,这个红点那点saveps.is new有新的邀请信息啊,那这个呢,就更改为。接下来是发送邀请信息变化的广播,嗯,那同样还是上面那个复制过来。
20:03
啊,搞定,这是别人同意了你的好友邀请,那接下来别人要拒绝了的好友邀请呢?你要做哪些事情呢?啊,大家想想,拒绝拒绝了,你上面这些步骤还需要处理了啊,你俩已经没有任何的交警信息关系了,那这个呢,就不需要处理了,那接下来这红点需不需要处理呢?红点需要处理。红点更新一下,表示他拒绝了你,那这个地方拿过来,哎,还是有信息的变化,同样那拒绝了你这个也需要发送这个邀请信息变化的广播。这样呢,这个全局监听类啊就建完了,但是建完了之后呢,我这个类还没有被调用,在哪里需要它被调用呢?啊要它让它在这个模型层中进行调用啊,在模型层的哪里比较合适呢。就在它初始化的时候,就开启全局监听啊,开启全局监听啊,在这里面就做一件事情就行了。另一个。
21:09
啊,Listener里面需要传递一个参数,就是上下文啊给他。然二加分,这样呢,就注册了一个监听啊,大家捋一下这个思路,首先呢,在这个application啊一下程序运行的时候,它就会走这个方法引进的方法,然后呢,走这个呢,它就会进到这个引进的方法里面,在这里面呢,它就会开启这个全监听,开启全监监听之后,他就会走它的构造方法,构造方法里面呢,注册了一个联系人变化的这么一个广播啊,这广播里呢,就可以有这么多方法,分别是联系人增加的方法,联系人删除的方法啊还有呢,是啊,接收到联系人给你发的好友邀请。啊,同时呢,还有啊,你的好友同意了你的邀请啊,这个呢,是你的好友拒别,就是别人拒绝了你的好友邀请,这么些方法啊,大家这个地方啊,一定要认真去捋一遍思路啊,还是比较绕的。
我来说两句