新普金娱乐网址


回归本心

雨齐游记 疯行天下(十六)

【iOS】7.4 定位服务->2.1.2 定位 – 官方框架CoreLocation: CLLocationManager(地方管理器)

  • 十二月 20, 2018
  • 地理
  • 没有评论

=

正文并非最后版,要是想使爱戴更新或重凑巧的始末请关注文集,联系形式详见文末,如爆发疏失和落,欢迎指正。

八卦、社交、舆论:是啊在培训我们?

卢晓周

一如既往、猫狗之战

于自养狗往日,我妈就留了一如既往但是猫,是平等不过留了成百上千年之老猫,而且恰恰不久前在柴火房产下了季只有略略猫。我走去看了同样目,四单纯稍家并还无开眼开眼睛,老猫见到本人随即警觉的哧哧发出示威声。过了几乎上自己准备把其转移至夫人来通常,到柴火房一看,居然还丢掉了。后来邻居告知我说,老猫养了小猫,不可知去押之,看了它就是晤面把小猫转移地点。原来猫这种动物对人口的警惕心如此的大。好像还说要人失去看老猫生产小猫,老猫就会晤将小猫咬死。等自再也察看这么些小猫的下,发现确实少了平等独自小猫。不精通和本人上次一不小心去偷看小猫有没起关联,但即刻从将自身吓得重新为未错过逗小猫们了。

在我之及时漫漫狗正式入驻我家的时刻,其实这里早已经是猫的地盘,这漫长老猫有相对的显要,我妈平时因着屋前屋后七七八八底流浪猫,说这个如故当时不过老猫的后裔。这一个早已经和老猫脱离母子关系之猫,偶尔会到院子里来抢食物,一旦受老猫发现,就会合被老猫龇牙咧嘴的被好走,旦有反抗者,即以老爪伺候。

老猫爪子的决定,小狗于次龙便领教了,它还不知天高地厚到猫食盆里去吃东西。老猫对这陌生的不速之客毫不虚心,当即用老爪狠狠教训了小狗。小狗呜呜咽咽,好不死,我快过去将它们赢得走。

老三单纯小猫和小狗之间,倒没有暴发肯定的撞,这是坐小猫从不怕不搭理小狗,看到小狗来了,三止略略猫就滴溜溜的一路跑活动了。

生活似箭,岁月如梭,两只月之后,小狗长成了大狗,已经敢于正面在老猫的前边抢夺食物,而且会不时的主动发起争论,老猫除了龇牙咧嘴的示威之外,已经针对性狗狗的挑战无力举行镇压。而三单纯小猫即使以个头上吧增长了许多,但吃亏在物种本身的弱势上,狗狗已然可以肆无忌惮对三独稍猫举办强奸,三光小猫除了逆来顺受,别无选取。

狗狗对三仅仅有些猫真的凡“拿包子喝茶”,即强者对弱者的那种高屋建瓴的态势展现得放眼。但奇怪的是,狗狗并没有撕咬小猫,只是将小猫骑在胯下,或错,或舔毛,小猫等也逐渐认同、采用了狗狗的越物种的水乳交融举动。一来亚失,小猫等也会指向狗狗举行各类相亲的言谈举止,或错,或舔毛,狗狗四脚朝上的睡在地上,万分分享小猫为好捉虱子。

早上回家,看到一犬三猫挤在联合睡,我内心总是一样暖。即使在劫食物常,狗狗依仗身材优势,小猫等接连在狗狗的武力以下四散奔走,但它们天天依旧以同手舞足蹈的打,每一天上午依然挤在同步睡。

老二、理毛活动

固然如此我们下的老猫和狗狗之间为食物问题常常发微圈圈争论,但多维持了和平局面,特别是狗狗和老三但是小猫之间以互动舔毛、捉虱子的友好往来更进一步地发展暴发了跨物种的交,树立了不同物种、种族之间坚定不移和平共处五宗基本原则的宏伟旗帜。可见不同物种、种族之间是否和平共处,关键在于要咬牙政治对话(如猫狗之间的舔毛、捉虱子),而休是直的武力炫耀或恐吓(老猫坚贞不屈对狗狗施以老爪示威、狗狗依仗身材施压老猫)。我们家之庭院丰盛大,完全容得下猫狗在是幸福的活。

为咱拿目光回到人的自己。不驾驭我们来没发出到了这种特其余棋牌室由过麻将,即便这里可能都是街坊四邻的熟人一起消遣,但偶尔事不凑巧,通常联手打麻将如故打扑克的席位都远非空位,这时候就可能是4单精光陌生的人头汇集一桌。但差一点绕牌公司下来,四单陌生的丁哪怕曾经像认识好漫长的老友一样说笑风生了。

那边发生星星点点只问题:

(1)为啥大家平时玩耍的娱乐如故片只人要么是四独人口?

(2)为啥通过麻将或扑克这样的一律近乎娱乐,会让我们快速由陌生到习?

咱先对第一独问题。不难发现,很多玩、娱乐活动大多仍旧鲜单人口要么五只人于齐耍,比如像上边说的起麻将、玩扑克牌,还有象棋、围棋、乒乓球、羽毛球、台球等等,诸如此类。这种只好五只人要么两只人口玩的游艺,是因大家制定的游戏规则决定的啊?答案可能是否认的,真正的由来想必是来自大家的生物学基因决定的。不错,就是来源于当年大家的远祖猿类的基因遗传。科学家已经意识,大家的表兄弟大猩猩就是经过互理毛来起社交关系之,而大猩猩理毛的位移,只可以通过一定的涉及进展,而且太多就只好是四独人口当同。

为啥最三只可以是4独人啊?淌倘若多少人口,三组大猩猩面对面以成一解除在一起理毛,如下图:

当霎时三独组成中,相邻之少数个做中还足以举办中用之维系,但要中还隔在雷同组好猩猩,交流就会遭到阻碍,比如a和c之间、a和f之间就非克立竿见影开展关联,a和f之间、c和d之间也是同样如此。而且那种三人中间才可以有效互换、交换的成,还会潜移默化及我们现各个场面的部落之间的联系,人类学家邓巴(Dunbar)早就发现了叙群体一般都止限于4只人之即无异景观。比如当舞会或者酒吧里,尽管大家以不同之说道群体间来来去去,但若是开口群体过了4只人,他们即使会即时分成不同之发话群体。

足这样说,非正式的、非社团化的玩乐、娱乐活动的人口组合,是来自我们先人类人猿的理毛活动,而只有人类更加具有协会化要求今后,才能够起足球、篮球等等这样群体性的体育运动。二姨们的广场舞蹈看正在接近是不行松散的旋之聚会,其实私下或协会化的结果。

近期应对第二只问题。四独精光陌生的人坐于牌桌上为啥一下子就是可以成为熟人呢?这一个意况有点类似大家组团出游,车上的游人是一点一滴陌生的,但过无了多长时间,你就是会意识,那多少个阅览者之间已经生矣许多相互熟知的有点团伙。其实就为与理毛活动有关。这么些以在联合打牌的口,或因于一个车上旅游之丁,他们之间的交换,就好像大猩猩之间的理毛,这种面对面的理毛—打牌(聊天),拉走近了互相之间的偏离。

其三、天生八卦

理毛是灵长类动物间发展社交的基本功,通过理毛建立社交活动的显然效果,显明是领先物种的,我家的略微狗一先导对几独有些猫轻则疯吼,重则避免以胯下咬之,但透过猫狗之间互相的舔毛、磨蹭、捉虱子的理毛活动,小狗都指向小猫温柔许多,进而建立了过物种中的名贵之和平局面,可以当秋夜微凉中拥抱在联名取暖。

理毛,可以创建跨物种的交情。再例如,为何猫啊,狗啊,甚至狮子、老虎这样的猛兽,只要它可以吃您把放在其的峰上给你抚摸,它们就会即刻马乖顺下来。大家下的老猫和小狗之所以无法树立友谊,恰恰就是是她之间不能开展理毛活动,而当有些狗力压小猫时,倒是意外地吃小猫和小狗带来了出人意料的亲昵接触,小猫的理毛为和谐沾了小狗的雅。

理毛就同团及动,对于猿类社会发展起了深远的震慑,不光是我们明天的过剩打娱乐活动就是这种基因遗传的结果,包括我们现爱八卦、八婆也是理毛活动之副产品,无论是多少个老婆在一道的老人家里匮乏,依然有数只男人当一齐的胡吹乱侃,都是理毛时养成的惯。试想一下,两单猿类在并理毛时,当然会嘀嘀咕咕的说在其余猿类的风言风语。

设更是深刻的震慑是,在理毛时,猿类得以理解一桩事:什么人才是与本身是同等手拉手的?哪个家伙在背后议论我?于是,这即使分割来了亲疏之变,进而就碰面世派系、团伙。可以说,人类先天全的社会行事,在几百万年前之北美洲原始森林里之多只猿类相互理毛时即使已经决定了。

当猿渐渐发展成人,体毛退化了,用不着相互理毛了,但爱好凑在一起吹吹牛,八卦一下这种习惯也保留了下去,于是乎,找到一个好替的方案势在必行,四只人于一块儿打游戏,下下象棋什么的,不纵是然而好之方吧?看看现在底人数,与其说是在打麻将,不如说就是寻觅个会共同八卦。乃至姨妈们好同玩耍广场舞蹈,也是这样。

几可以说,游戏就是猿类理毛最精的替代方案。

假使前些天,我们正是通过不同的八卦分别爆发了谁才是协调人,和哪个不可知鸟到一个壶里,这虽可知解释为啥在一个明星绯闻的新闻下边,或者有热点话题,会起半点差不同的人口,就比如发无齐戴天之仇一样相互攻击。

八卦,就是现在人类的交互理毛。很多口啊一个八卦争得面红耳赤,甚至打,其实她们关注的向未是八卦中的哪个是孰休,而是经八卦,他们找到了同类。

可毫无疑问,在一个猿类社谋面临,不可知叫其它猿理毛,或者没有另外猿给自己理毛,这样的猿一定会极其早死掉,它的基因肯定不可能传下。嗯,你自己所以会现出于是世界,肯定是所有远古那不过爱八卦的猿的基因的因。

猿类通过相互理毛,交流了相互之间的信,建立了友谊,增添了社交圈,进而建立了好之多少团体,渐渐形成了团结之影响力,更进一步地抓住更多的粉丝,这样吧就生出矣挑衅现有秩序的力量,很显然,这一个上自然是结果自己之怪,黄袍加身,老子也如过过当大的瘾,小打小闹为使杀死另外猿类,抢更多女猿。

季、社交偏好

咱家之猫狗通过互动的舔毛、磨蹭、捉虱子—-也虽然是相互理毛,很快消除了种隔阂,达成了和平共识,我无通晓猫狗之间是否会读懂相互之间的言语,然而通过肢体语言,它们还是可以读懂互相的发挥,那么些历程实际上就是为猫狗建立了相同种植社交纽带。

俺们用是群居动物,恰恰也是因远祖猿类在互相理毛时虽然既衍生和变化出了树社交纽带的基因,孤独的口,不然而丢人的,而且为不大可能有生殖后代的或者,因为早都深受进化杀死了。

我们同出生即深受丢弃在一个交际漩涡里,从家、幼儿园、高校,到步入社会,其实如故在不断扩展自己之应酬半径,构建和谐之争持网络,我们与认识仍旧未识的总人口,由陌生到熟识,或从习到路人,其中饰演决定性因素的,可能仍然大家毫不经意的废话—也便是八卦。

咱俩可否与别人起持久的名特优关系,可能连无是我们对某宏观议题,如宗教、艺术、经济学、政治、经济等等,有着共同之看法,而是我们针对相互的提供的闲言碎语、是凡免非有臭味相投的爱,那一个闲言碎语、是凡不不,就是八卦。你大可不必为这深感惊叹,社会心境学家Nicholas·埃姆勒就发现,人们的提内容80%-90%如故闲言碎语,国际及的政治巨头、富可敌国的富人私下的聊天,都是这样。

可以说,八卦是交际的调味品,为互相之间打开互动局面提供了润滑剂。当然,八卦不负责提供任何实质,或者也追精神提供线索。由此,无论是从区区只之间的拉、八卦中寻觅不交事情的本色,就是以明日应酬网络的争辩着,也如故鞭长莫及取工作的旧。这即使足以分解,为啥社交媒体齐,新浪或者微信朋友围,谣言会如此的多,因为谣言恰恰就是是八卦内容被最好好的谈资。谣言最后让我们遗忘,不是为精神被谣言破灭,而是为本来的谣传都让我们不感兴趣。

交际媒体上或生活遭,充斥在各式各类的妄言,还表明了一个问题,为何大家难以做到独立思考,而连人云亦云?大家是通过协调建的应酬网络被的每个人对好之看法来起自身认知的,马克思·韦伯说:“人类是挂于协调织的意思的网上的动物。”这多少个含义之网的意义是哪来的,其实固然是别人给给协调的理念、评价的综合。因而,可以如此说,咱们是悬挂在大团结打的应酬网络上之动物。

也就是说,要完成真正的单身思考太为难矣,至少你如超越自己打的张罗网络达到之大部人口之所谓的主流认知,对于大多数底食指来说,这简直是免可能的。这像能讲很多题目,自天涯论坛、微信兴起后,带了一个民学习之狂潮,各类学习社群、圈子、付费内容,大家与于各式各类的大师傅要大v屁股后边,但也生少有人真通过那个上可以让自己的咀嚼升级,其实原因就在,大家一如既往窝蜂的热情高涨,不是在于真的如学到啊—当然,很多师父要大v也未曾呀事物让我们读,他们只可是是供于了信众许多之八卦谈资罢了。

本来,闺蜜间要三五基友一起扯扯八卦并无不可,甚至对面目可憎的外人不正边际、言不由衷地说说天气,也是制造。但本我们管社交纳入到了一个品牌市场运作的主导能力,那这种社交到底是啊也?大家常说,乐乎营销、社群营销甚至新媒体营销、内容营销的要害内容也是应酬,这里的交际又是呀吧?这么些情节都用于自家之付费专栏拓展分享。

五、舆论利器

本来,无论是一个深猩猩,抑或是大家极为祖类人猿,想要当和谐的族多被取得重新不行之影响力,仅仅凭借理毛是力不从心吸引更多的粉丝的,手工理毛毕竟是起宏伟的局限性,很显然,假诺出一致种植手段(抑或工具)可以于更多的雅猩猩或猿类举行理毛,哪不就足以事半功倍吗?语言的产出就是是自然的,邓巴(Dunbar)就看语言就在原始人理毛的当儿形成的。只有大猩猩或猿类领悟了语言就一利器,才可以于它们以原始森林的残酷无情竞争着赢得优势,结果就是是大猩猩受制于言语能力的牵制,目前只可以沦为到实验室或动物园供自己之姻亲猿类的后人——人类举办实验抑或参观。

人类领会了言语后,终于把好的理毛这同社团及动之力量发挥到了再次强的层次,有矣言语后,人类的社交活动就更加丰硕多彩,人类的社团化得以提升。通过一对一的手工理毛去与每个类人猿(原始人)建立社交关系,灌输自己的绝妙主张,显明可是过低效,有矣言语后,登高一呼,就可以覆盖任何族群,让抱有猿人(原始人)都热血沸腾,这功效当然乐意。

言语的威力,在首先独原始人站于嵩石头上对下黑压压的人群举行动员的时节,就起来显现,到今之争持媒体及,所谓的大v感受及祥和在浏览粉丝的私信就如是皇帝批阅奏章的感觉,其中所展现的牵线舆论的权位所带动的快感,其实是一脉相承的。

散文从某种程度上来说,就是一律栽理毛活动。要精晓,猿类通过理毛活动,也是开展同样种舆论活动,因为信息方可以理毛时举行互换传播。受制于猿类(原始人)的技术手段,它们从不媒人,只可以通过手工理毛来交流信息。但暴发了语言、文字之后,这种舆论的威力更为展现。而现代社会的红娘,特别是应酬网络的起来,改变了猿类只好凭借双手理毛的限定,一漫漫博客园可为众多总人口理毛。

星星只老伴之间,假如无什么共同的八卦话题,可以毫无疑问不能够变为好爱人,就像个别只男人间,即使没推杯换盏的相同起醉了,也不大可能成为形影不离,因为不够了相互互相“理毛”,是相当不便立信任的。很两个人口,之所以会以社交媒体得到很多死忠,恰恰是控制了杂谈来吃受众举办理毛的隐秘。

从某个层面上来讲,当代之地缘政治的竞争,早就突破实际上的地理边界——地图及划定的领土的分界线,而是经过互联网早都编织成的网络舆论进行真正的跨国界的全球化的舆论的战。欧美舆论的利器是什么啊?就是普世价值,几乎世界特别是进化面临之国度只要中东、东欧顶地点,早已经领教了她的厉害。二零一九年中华吧于此制伏得力不从心动弹。配合普世价值之履战略是啊为?就是颜色革命。中国以拓展反制,最后指出了团结的主张:构建人类命运共同体,行动战略就是是“一带合”。

扯远了,就此打住。


正文系目录:
================== 所属文集:【iOS】07
设备工具
==================
7.4 定位服务->1.0 简介
7.4 定位服务->2.1.1 定位 – 官方框架CoreLocation:
请求用户授权

7.4 定位服务->2.1.2 定位 – 官方框架CoreLocation:
CLLocationManager地点管理器

7.4 定位服务->2.1.3.1 定位 – 官方框架CoreLocation
功用1:地理定位

7.4 定位服务->2.1.3.2 定位 – 官方框架CoreLocation
效能2:地理编码和反地理编码

7.4 定位服务->2.1.3.3 定位 – 官方框架CoreLocation
功效3:区域监听

7.4 定位服务->2.1.4 定位 – 官方框架CoreLocation
案例:指南针效果

7.4 定位服务->2.2 定位 –
locationManager框架

7.4 定位服务->3.1 地图框架MapKit效用1:地图呈现
7.4 定位服务->3.2 地图框架Map基特功用2:路线规划(导航)
7.4 定位服务->3.3 地图框架Map基特(Kit)效率3:3D视图
7.4 定位服务->3.4 地形图框架Map基特效用4:地图截图
7.4 定位服务->3.5 地图框架Map基特效能5:POI检索
================== 所属文集:【iOS】07
设备工具
==================


定位目录:

合法框架CoreLocation目录:

本文目录:


1.0 简介


2.0 属性方法

CLLocationCoordinate2D:是一个因而来代表经纬度的结构体

关于经纬度:

有关经纬度

distanceFilter:每隔多少米恒一不良

desiredAccuracy:设置固定精确度


3.0 requestLocation:单次定位要,获取一蹩脚位置信息


4.0 三种植永恒服务

4.1 标准定点服务

下介绍下 CLLocation 对象:

CLLocation 对象属性方法:

根本方法:distanceFromLocation

4.2 显然地方变动之定势服务

代码示例:遵照上述文化写一个”单次定位”的 demo

编译环境:Xcode 8.0
模拟器版本:iOS 10
Swift版本:3.0

【OC语言】
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate> // 代理
@property(nonatomic, strong) CLLocationManager *locationM; // 位置管理者
@end

@implementation ViewController

#pragma mark - 懒加载对象,并在懒加载方法中进行部分初始化操作
- (CLLocationManager *)locationM {
    if (!_locationM) {
        // 1. 创建位置管理者(需要强引用,否则一出现就会消失)强引用后,UI控件创建时会添加到subviews数组里,作用域结束时也不会释放
        _locationM = [[CLLocationManager alloc] init];

        // 2. 设置代理, 接收位置数据(其他方式:block、通知)
        _locationM.delegate = self;

        // 3. 请求用户授权 --- ios8之后才有(配置info.plist文件)

        //方法1:判断系统版本
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0){

            [_locationM requestAlwaysAuthorization];    //持续授权
            //[_locationM requestWhenInUseAuthorization];      //使用期间授权
        }

        //方法2:
        /*
         if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {

         [_locationM requestAlwaysAuthorization];//持续授权
         [_locationM requestWhenInUseAuthorization];//使用期间授权
         }
         */

        // 4. 设置定位的过滤距离(单位:米), 表示用户位置移动了x米时调用对应的代理方法
        // 本次定位 与 上次定位 位置之间的物理距离 > 下面设置的数值时,就会通过代理,将当前位置告诉外界
        _locationM.distanceFilter = 500; //在用户位置改变500米时调用一次代理方法

        // 5. 设置定位的精确度 (单位:米),(定位精确度越高, 越耗电, 定位的速度越慢)
        // _locationM.desiredAccuracy = 100; // 当用户在100米范围内,系统会默认将100米范围内都当作一个位置
        _locationM.desiredAccuracy = kCLLocationAccuracyBest;
    }
    return _locationM;
}

- (void)viewDidLoad {
    [super viewDidLoad];
}

#pragma mark - 点击屏幕,开始更新用户位置
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self compareDistance]; //比较两点间的距离

    // 判断定位服务是否开启
    if ([CLLocationManager locationServicesEnabled]) {
        NSLog(@"已经开启定位服务,即将开始定位...");

#pragma mark - 开始定位
        // 方法1:标准定位服务(使用位置管理器进行定位)
        // 开始更新位置信息(一旦调用了这个方法, 就会不断的刷新用户位置,然后告诉外界)
        // 以下代码默认只能在前台获取用户的位置信息,如果想要在后台获取用户的位置信息, 那么需要勾选后台模式 location updates
        // 小经验: 如果以后使用位置管理者这个对象, 实现某个服务,可以用startXX开始某个服务,stopXX停止某个服务
        // [self.locationM startUpdatingLocation];

        // 方法2:监听重大位置变化的服务(基于基站进行定位)(显著位置变化定位服务)
        //  [self.locationM startMonitoringSignificantLocationChanges];

        // 单次定位请求
        // 必须实现代理的定位失败方法
        // 不能与startUpdatingLocation方法同时使用
        [self.locationM requestLocation];
    } else {
        NSLog(@"没有开启定位服务");
    }
}

#pragma mark - 比较两点间的距离(直线距离)
- (void)compareDistance {
    // 北京位置
    CLLocation *location1 = [[CLLocation alloc] initWithLatitude:39.26 longitude:115.25];
    // 上海位置
    CLLocation *location2 =[[CLLocation alloc] initWithLatitude:30.4 longitude:120.51];

    // 两个地方的距离(单位:米)
    CGFloat distance = [location2 distanceFromLocation:location1];

    NSLog(@"比较两个点的距离:%f", distance / 1000);
}

#pragma mark - 代理方法:当位置管理器获取到用户位置后,就会调用此方法
// 参数: (manager:位置管理者) (locations: 位置对象数组)
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{

    NSLog(@"位置信息:%@", locations);

    // 停止定位(代理方法一直调用,会非常耗电,除非特殊需求,如导航)
    // 只想获取一次用户位置信息,那么在获取到位置信息之后,停止更新用户的位置信息
    // 应用场景: 获取用户所在城市
    [manager stopUpdatingLocation];
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失败");
}

#pragma mark - 代理方法:当用户授权状态发生变化时调用
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{

    switch (status) {

        case kCLAuthorizationStatusNotDetermined:{
            NSLog(@"1.用户还未决定");
            break;
        }
        case kCLAuthorizationStatusRestricted:{
            NSLog(@"2.访问受限(苹果预留选项,暂时没用)");
            break;
        }
            // 定位关闭时 and 对此APP授权为never时调用
        case kCLAuthorizationStatusDenied:{
            // 定位是否可用(是否支持定位或者定位是否开启)
            if([CLLocationManager locationServicesEnabled]){
                NSLog(@"3.定位服务是开启状态,需要手动授权,即将跳转设置界面");
                // 在此处, 应该提醒用户给此应用授权, 并跳转到"设置"界面让用户进行授权在iOS8.0之后跳转到"设置"界面代码
                NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

                if([[UIApplication sharedApplication] canOpenURL:settingURL]){

                    //  [[UIApplication sharedApplication] openURL:settingURL]; // 方法过期

                    [[UIApplication sharedApplication]openURL:settingURL options:nil completionHandler:^(BOOL success) {
                        NSLog(@"已经成功跳转到设置界面");
                    }];
                }
                else{
                    NSLog(@"定位关闭,不可用");
                }
                break;
            }
        case kCLAuthorizationStatusAuthorizedAlways:{
            NSLog(@"4.获取前后台定位授权");
            break;
        }
        case kCLAuthorizationStatusAuthorizedWhenInUse:{
            NSLog(@"5.获得前台定位授权");
            break;
        }
        default:
            break;
        }
    }
}

-(void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

打印结果:

OC - 单次定位[11287:835597] 比较两个点的距离:1093.824596
OC - 单次定位[11287:835597] 已经开启定位服务,即将开始定位...
OC - 单次定位[11287:835597] 3.定位服务是开启状态,需要手动授权,即将跳转设置界面
OC - 单次定位[11287:835597] 已经成功跳转到设置界面
OC - 单次定位[11287:835597] 5.获得前台定位授权
OC - 单次定位[11287:835597] 4.获取前后台定位授权
OC - 单次定位[11287:835597] 位置信息:("<+39.78583000,+116.40641700> +/- 5.00m (speed -1.00 mps / course -1.00) @ 2016/9/21 \U4e2d\U56fd\U6807\U51c6\U65f6\U95f4 \U4e0b\U53485:19:01")
【Swift 语言】
import UIKit
import CoreLocation

class ViewController: UIViewController {

    // MARK: - 懒加载
    lazy var locationM : CLLocationManager = {

        // 1. 创建位置管理者(需要强引用,否则一出现就会消失)强引用后,UI控件创建时会添加到subviews数组里,作用域结束时也不会释放
        let locationM : CLLocationManager = CLLocationManager()

        // 2. 设置代理, 接收位置数据(其他方式:block、通知)
        locationM.delegate = self

        // 3. 请求用户授权 --- ios8之后才有(配置info.plist文件)
        // 判断系统版本
        if (Float(UIDevice.current.systemVersion)! >= 8.0){
            locationM.requestAlwaysAuthorization()// 前后台定位授权
            // locationM.requestWhenInUseAuthorization()  // 前台定位授权
        }

        // 4. 设置过滤距离
        // 如果当前位置, 距离上一次的位置之间的物理距离大于以下数值时, 就会通过代理, 将当前位置告诉外界
        locationM.distanceFilter = 100   // 每隔100 米定位一次

        // 5. 设置定位的精确度(定位精确度越高, 越耗电, 定位的速度越慢)
        locationM.desiredAccuracy = kCLLocationAccuracyBest

        return locationM
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    // MARK: - 点击屏幕,开始更新用户位置
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        // 方法1:标准定位服务(使用位置管理器进行定位)
        // 开始更新位置信息(一旦调用了这个方法, 就会不断的刷新用户位置, 然后告诉外界)
        // 以下代码默认只能在前台获取用户的位置信息, 如果想要在后台获取用户的位置信息, 那么需要勾选后台模式 location updates
        // 小经验: 如果以后使用位置管理者这个对象, 实现某个服务, 可以用startXX开始某个服务,stopXX停止某个服务
        // locationM.startUpdatingLocation()

        // 方法2:监听重大位置变化的服务(基于基站进行定位)(显著位置变化定位服务)
        // locationManager.startMonitoringSignificantLocationChanges()

        // 单次定位请求
        // 必须实现代理的定位失败方法
        // 不能与startUpdatingLocation方法同时使用
        locationM.requestLocation()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

// 类扩展(CLLocationManager的代理方法)
extension ViewController: CLLocationManagerDelegate {

    // 代理方法:当位置管理器获取到用户位置后,就会调用此方法
    // 参数: (manager:位置管理者) (locations: 位置对象数组)
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        print("位置信息:%@", locations)

        // 停止定位(代理方法一直调用,会非常耗电,除非特殊需求,如导航)
        // 只想获取一次用户位置信息,那么在获取到位置信息之后,停止更新用户的位置信息
        // 应用场景: 获取用户所在城市
        manager.stopUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("定位失败--\(error.localizedDescription)")
    }

    // 代理方法:当用户的定位授权状态发生变化时调用
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

        switch status {

        case CLAuthorizationStatus.notDetermined:
            print("1.用户还未决定定")
        case CLAuthorizationStatus.restricted:
            print("2.访问受限(苹果预留选项,暂时没用)")
        // 定位关闭时 and 对此APP授权为never时调用
        case CLAuthorizationStatus.denied:
            // 定位是否可用(是否支持定位或者定位是否开启)
            if (CLLocationManager.locationServicesEnabled()){
                print("3.定位服务是开启状态,需要手动授权,即将跳转设置界面")

                // 在此处, 应该提醒用户给此应用授权, 并跳转到"设置"界面让用户进行授权在iOS8.0之后跳转到"设置"界面代码
                var settingURL:URL?

                if (Float(UIDevice.current.systemVersion)! >= 8.0){
                    settingURL = URL(string: UIApplicationOpenSettingsURLString)
                }else{
                    // 设置app scheme
                    settingURL = URL(string: "prefs:root=LOCATION_SERVICES")
                }

                if (UIApplication.shared.canOpenURL(settingURL!)){
                    UIApplication.shared.openURL(settingURL!)
                    print("已经成功跳转到设置界面")
                }
            }else{
                print("定位关闭,不可用")
            }
        case CLAuthorizationStatus.authorizedAlways:
            print("4.获取前后台定位授权")
        case CLAuthorizationStatus.authorizedWhenInUse:
            print("5.获得前台定位授权")
        }
    }
}

打印结果:

3.定位服务是开启状态,需要手动授权,即将跳转设置界面
已经成功跳转到设置界面
5.获得前台定位授权
4.获取前后台定位授权
位置信息:%@ [<+39.78583000,+116.40641700> +/- 5.00m (speed -1.00 mps / course -1.00) @ 2016/9/21 中国标准时间 下午5:59:01]

正文源码 Demo 详见 Github
https://github.com/shorfng/iOS\_7.0\_Device-Tools


作者:蓝田(Loto)
【随笔宣布平台】

简书
博客园

Gitbook(要是看小说最长,请看者平台发布的作品)

【代码托管平台】

Github

【如发疑难,请通过以下方法交流】

评论区回复
发送邮件
shorfng@126.com

正文版权归作者和本网站共有,欢迎转载,但未经作者同意要保留这一个段子声明,且在小说页面彰着位置被起原文连接,谢谢合作。


假定看自身的稿子针对性君发出由此,请随意打赏。您的协助用鼓励我累写!
  • 支出宝扫一扫 向我打赏
  • 汝啊得微信 向自家打赏

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图