00:01
下面我们来看,现在呢服务启动起来了,现在呢,我们要在服务里面去监听电话状态啊,用到的API呢,是他我们来看一下,那我演的呀。这个对象需要几个呀?这个监听器就就是这它啊,不是监听器电话的管理器是吧,它需要一个就够了吧,那我们在哪里去创建它呢?Private。啊,来个写个TM吧。这一个呢,一般情况下面,如果一个成员变量,它只需要创建一次,我们基本上都是在on create里面去给他做。对吧,嗯,来在这里面需要做几个事,第一个得到,呃,电话管理器,接着得到以后。
01:04
接听电话。状态啊,就这两步好了,我们先来看它怎么得到的。那这一个get system service是不是context的呀?那谁去取啊?当前是不是service,就可以选点get system service传一个标识名称。那个标识名声比较有特点,也比较有规律。就是什么什么manager,就前面的部分呢,是固定的,后面加service。看到了吧。好,那看它这地方需要强转,为什么需要转转,大家看它声命返回的什么,我们来看一下,我不见,因为咱们为什么他声明要返回,我不返回这个manager呢?那我系统里面是不是不同类型的服务对象,Manage对象啊你。
02:08
这一个方法要适配于所有返回,所以说呢,它只能是返回,我你自己去强转。好,下面监听电话,他有这样一个方法。叫你方法。我们来看一下。这不他吗?这里面首先是不是要查一个监听器啊好,看一下这个监听器走。这不它嘛,嗯,这是个类吧,来这个监听器呢,我得定义成成员变量啊,等会你就能知道为什么要定义成变量啊。来这里面呢,是写一个名字,就叫listener吧,又一个他。它是本身就是一个时间内啊,那监听器得有一个回调方法来才能最终监听吧。
03:07
我要用它的哪个回调方法呢?我们来看一下这个outline。啊,还这么多。找哪一个我们来看啊,嗯,都是以on开头的方法。诶,有这样一个方法。是不是它呀,而且你能看到这个状态是不是三种状态呀,就用它,它叫一个什么呀,做了一个是默认的空实现了啊,啊所以说我们的子类就要去重写这一个方法啊,去做我们自己想做的事。来,那我这样写一个。大括号,接着去重写这个方法。重写这个方法呢,我们来这里来看一下什么时候调用,当嗯通话状态发生改变时调用,那通过哪些状态呢?在这个地方它也有标明。
04:11
这不他吗?其实把它拿过来就可以对吧,嗯,这里面已经很能说明,其实我上面说的就是这个,对这个它它的一个翻译。啊。我们写好它了,来看到鉴定阶段,下面还有一个,它里面先别写啊,我们先把这个事情完成了。大家看。我们先进再进去看一下,它需要一个event对吧?什么事件我们来看一下,他让我去找谁了。找这个phone state listener,它里面有不同的标识啊,其实就找这些东西。啊,那好了,你现在看第一个这个是个什么意思,如果穿它。什么意思叫停止监听,你说这你说这个我什么时候用啊。
05:09
那停止也就说停止监听,那停止监听用对吧,那对于我上来说,我要要不要用这个。大家想需要。我说我的on destroy被调用的时候,是不是说明我停止了服务啊?我停止服务的时候我得做什么事?是不是停止监听,停止电话监听,那如何来停止电话电话监听呢?他这个特别怪,他是这么写的listen。传那个监听器这个里面。传谁呀?传他。是这意思吧,啊,旧船的是由他。找listen。那。就是不监听的,那就停止监听。
06:01
是这样一个意思啊,好了,那关键我还找了半天还没找到我们的是吧,那我们的是哪一个呢?我下面搬一点啊。对吧,你state。就是这一个。别人说老师这么多,我哪知道是哪一个啊,是吧,你这么快就定位了啊,我也是学会了,我才这么跟大家说,那不学会之前他也我也不知道。对吧,主要是你看到这一个属性就明白啊,这个是对的。你说你开始不知道,你要想找出来这个还是挺费劲的,可能要点时间。啊,这是这一个啊,监听电话的状态。下面一旦电话状态改变,是不是就用这个方法吧?好啦,我们呢,来一个Switch。来一个state。
07:02
写呗,来一个他。点这一个,我说这是什么状态。空闲是吧,啊空闲好了,下面还有几个。这个是什么?想泥很简单。下面还有一个接通,嗯,好了吧,好跟大家说一个事,什么时候会进入空闲状态了,有两种情况啊,大家可能理解的有一个挂断电话对吧。是吧,挂断通话,挂断电话是不是一种啊,还有一种情况就是未来电之前它会掉,有意思啊,我们等一下你就能看得到啊,这个都这个通过打印才能看得见。
08:01
好,这个时候呢,我去加一些打印输出,嗯,大家就能明白了,这个说的是空闲。好了,我把这一个呢给它整一下啊。这里面接通了。还有一个想你。没有吧,嗯,好啦。来啊,在这里面呢,还有需要一些权限,我现在是不在读取电话状态吧。读取电话状态,它需要有一个权限,我们看一下权限,其实你也可以通过抛异常的形式来去整,我就不再去整那个整了,来我呢直接写上啊。跑机场行驶的有点慢。我写上一个,我这地方一共需要两个权限吧。
09:02
开始本来就有一个了吗?嗯,来加上一个,使用一个权限,开始叫Co。打电话。有没有他呀,因为我们要挂断电话嘛。需要一个,他把这个选项加上,还有一个。还有一个什么呢。嗯,还有一个就是我们那个。另外一个加一个。我们当前读取电话状态,需要有个权限给它加上,叫什么呢?Read。读。哪个这个吧,读取电话的状态,这个时候给他先加上啊,读启电话状态。还有一个,到时候我们肯定要挂断电话的。把它也加上啊,挂断电话,嗯,好,把这个先写上,别忘了,别忘啊,下面你说我这里面有三种可能,空闲响铃和接通,我在哪个里面。
10:09
去做我们该做的事。是不是想你呢?好想铃里面我做什么?啊,也就是说判如果。电话号,电话是什么?来电电话,嗯,来电电话是黑名单号对吧?啊,对于我们来说就是那个110。就怎么做啊,就自动挂断对吧,就挂断电话来做呗,很简单啊,If如果。有一个人要等于我的幺零,就是我的incoming number。
11:00
那我就要去挂断电话,叫什么end call and call,刚才是不是写过呀?嗯。嗯,挂断电话,来把那些东西给他布置一下先呢,我们要把AIDL文件。给它复制过来,这是一个CTRLC。看着。好了,接着呢,需要把那个挂断电话的那个方法的那个代码。给它复制过来看C。看牛逼。嗯。好,格式化,把这里面异常都给它抛出去。好了吧,嗯,搞定就这样的一个方法,可以把它写成私有的好了吧。
12:06
嗯,整个呢,就这样差不多了N的括,而我不是掉了N的括吗?它这里面。哦,有异常是吧。嗯,就把它处理一下吧,嗯。好了。嗯,这个就好了,来,现在我们来看一下。当前我是连接的没有问题,好了,接着呢,我去运行一下。嗯,运错了是吧,运行的是它。可以,没问题,好,现在。启动。啊,大概。我一启动监听设置监听它是不是就掉了那个空闲呢,现在没来电话吧,好,下面我们就要准备打电话了啊。
13:01
先是打一个正常的还是非正常的呢。就是一个电话都打不出去是吧,来试试。那先先先把那个通话的一些记录先给它清掉啊。看有没有通话记录,有记录了先都给他清了。一个通话记录都没有是吧?好,那我的应用也退出了吧。那。看这里。啊,007SERVICE是吧,我把它退出啊好啦。诶,这怎么卡了。好了吗?不动啊,窗户是可以的,好了。都好了,还有好的吗?太聪明了,这人真是。
14:08
太聪明了,不太好了,是不是?有时候人傻一点也是有好处的,好,来,我们来看一下啊,现在好了吧。锁屏呢?嗯,好了吧,好了好了,来啊,我现在退出应用了,但是我的服务现在是运行状态吧。来,这是。我呢,就用110打个电话。这个时候,人。能出现那个通话的那个界面吗?应该不能对吧,我们来试一下。走。没有,你看没看到效果对吧,但是。是吧,通话记录里面是不是有这个110呢?说明110曾经境外过电话,但是我自动给他什么挂断了。
15:03
好,我来了,来去重新把它关联一下,那个打印信息应该还在。打开。是不是响铃空闲呢?哎,为什么后面空闲呢,因为我挂断了嘛,对不对,嗯,很好啊。别的是可以打的,比如说我打一个别的。112。就可以接着我来接通可以吧,接通以后。再挂断啊,这个你也没有,你没退出。这不能怪我,这是他的问题啊,好,别管那个是啊,来看一下,我们把那个了给他先下一下。
16:04
啊,模拟器出现小问题是很正常的事啊,我们来看一下它。看着。是不是有接通啊。对的吧,嗯,对的没问题啊。现在呢,我们就能看到我们如何来去接听电话了啊嗯,这是这样一个事,还有一个。我现在应用只要不退出,是不是一直都是,我退出以后是不是都一直监听呢?我如果想停止监听怎么办呢?我是不是点到他呀。这个时候它的轴。干什么?是不是destroy?而我在service destroy的时候,我又做了一个事情,很关键,如果不做这个事,那也不行。就他。大家下面下去后可以试一下,我就不我就不写它。
17:00
即使你的服务你停止了。它那个监听依然监听的。啊,而现在我们肯定是。大概我再打110。是不是可以啊对吧,嗯,没问题,幺零呢是可以打的。那是因为我们的监听是不是已经取消了呀?就是这样一个是大家需要去知道啊。
我来说两句