新普金娱乐网址


科人哲思录01:科学与人文,从一体到疏离

iOS开发 iOS10推送一定要看(基础篇)

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

  • 二月 27, 2019
  • 地理
  • 没有评论

=

一旦认为本人的小说对您有用,请随意打赏。您的帮衬将鼓励自个儿继续创作!
  • 支出宝扫一扫 向自家打赏
  • 您也得以微信 向自身打赏

八卦、社交、舆论:是怎么在培养大家?

卢晓周

一 、猫狗之战

在自己养狗此前,小编妈就养了二只猫,是三头养了诸多年的老猫,而且恰恰不久前在柴火房产下了六只小猫。作者跑去看了一眼,三只小家伙还没睁开眼,老猫见到自个儿立时警觉的哧哧发出示威声。过了几天俺准备把它们转移到家里来时,到柴火房一看,居然都不翼而飞了。后来邻居告知作者说,老猫养了小猫,不可能去看的,看了它就会把小猫转移地方。原来猫那种动物对人的警惕心如此之高。好像还说如若人去看老猫生产小猫,老猫就会把小猫咬死。等本身重新看到那么些小猫的时候,发现确实少了七只小猫。不知情与自小编上次一非常的大心去偷看小猫有没有涉及,但那事把本身吓得再也不去逗小猫们了。

在自家的那条狗正式入驻作者家的时候,其实那里早已经是猫的地盘,那条老猫有相对的权威,作者妈平日指着屋前屋后七七八八的流浪猫,说那几个都以那只老猫的子孙。这几个早已经和老猫脱离母子关系的猫,偶尔会到院子里来抢夺食品,一旦被老猫发现,就会被老猫龇牙咧嘴的给吓走,旦有反抗者,即以老爪伺候。

老猫爪子的立意,黄狗在其次天就领教了,它甚至不知天高地厚到猫食盆里去吃东西。老猫对那个目生的不速之客毫不谦虚,当即用老爪狠狠教训了小狗。小狗呜呜咽咽,好不十二分,我赶紧过去把它抱走。

五只小猫和家狗之间,倒没有产生分明的争执,那是因为小猫根本就不搭理黄狗,看到黄狗来了,五只小猫就滴溜溜的二只跑走了。

日子似箭,岁月如梭,多少个月之后,小狗长成了大狗,已经敢李欣蔓面在老猫的前边抢夺食品,而且会时常的积极发起争执,老猫除了龇牙咧嘴的示威之外,已经对家狗的寻衅无力举办镇压。而多只小猫固然在个头上也长了累累,但吃亏在物种自个儿的弱势上,家狗已然能够妄自尊大对四只小猫举办性侵,三只小猫除了委曲求全,别无选用。

小狗对四只小猫真的是“拿馒头喝茶”,即强者对神经衰弱的那种高屋建瓴的态势呈现得放眼。但奇怪的是,家狗并没有撕咬小猫,只是把小猫骑在裆部,或磨蹭,或舔毛,小猫们也稳步承认、选用了家狗的跨物种的知己举动。一来二去,小猫们也会对黑狗举行种种接近的一言一行,或磨蹭,或舔毛,黑狗四脚朝天的躺在地上,分外分享小猫给本身捉虱子。

深更半夜回乡,看到一犬三猫挤在一块儿睡觉,作者心头总是一暖。固然在拼抢食品时,黄狗依仗身材优势,小猫们一而再在黄狗的暴力以下四散奔走,但它们每一天照旧在联名喜悦的嬉戏,天天深夜依然挤在共同睡觉。

二 、理毛活动

虽说大家家的老猫和黑狗之间因为食品难题时有小范围争执,但基本上维持了和平局面,越发是家狗和五只小猫之间以互动舔毛、捉虱子的友好往来更进一步地向上出了跨物种的友谊,树立了差异物种、种族之间坚定不移和平共处五项基本尺度的宏大典范。可知差异物种、种族之间是或不是和平共处,关键在于要持之以恒政治对话(如猫狗之间的舔毛、捉虱子),而不是始终的队伍容貌炫耀或威逼(老猫坚定不移对小狗施以老爪示威、家狗依仗身材施压老猫)。大家家的院子充足大,完全容得下猫狗在此幸福的活着。

让我们把眼光回到人的自家。不晓得大家有没有到过那种尤其的棋牌室打过麻将,即便那里大概皆以街坊四邻的熟人一起消遣,但有时事不正好,平日联合打麻将或打扑克的位子已经没有空位,那时候就恐怕是6个精光不熟悉的人凑一桌。但几圈牌局下来,多个面生的人就已经像认识很久的老朋友一样谈笑风生了。

此处有四个问题:

(1)为何大家日常玩耍的2十二十24日游都以多人只怕是五人?

(2)为何通过麻将或扑克那样的一类娱乐,会让大家非常的慢从不熟悉到熟知?

我们先回答第三个难点。简单察觉,很多玩耍、娱乐活动大多都以三个人照旧五人在一齐玩,比如像上边讲的打麻将、玩扑克牌,还有象棋、围棋、乒球、羽球、台球等等,诸如此类。那种只可以四个人或两个人玩的游艺,是因为大家制订的游戏规则决定的啊?答案或许是或不是定的,真正的缘故或者是缘于咱们的生物学基因决定的。不错,正是来自当年大家的远祖猿类的基因遗传。科学家一度意识,咱们的表兄弟大猩猩正是通过相互理毛来确立社交关系的,而大猩猩理毛的移动,只能通过一定的关系进展,而且最多就不得不是多少人在同步。

缘何最七只可以是4位吧?假若是六人,三组大猩猩面对面坐成一排在一起理毛,如下图:

在那四个结合中,相邻的多个组成之间都足以开始展览有效的牵连,但要是中间还隔着一组大猩猩,交换就会受到阻碍,比如a和c之间、a和f之间就不可能管用实行关联,a和f之间、c和d之间也是如出一辙如此。而且那种三人里面才能立见成效交换、沟通的三结合,还会影响到大家未来各样场所的群落之间的牵连,人类学家Dunbar早就意识了出口群众体育一般都仅限于3个人的这一气象。比如在舞会可能酒吧里,就算大家在不相同的开口群体之间来来去去,但要是开口群众体育超越了三人,他们就会及时分成差其他言语群众体育。

能够如此说,非正式的、非组织化的玩耍、娱乐活动的人口组合,是来源于大家祖先类人猿的理毛活动,而只有人类特别富有组织化必要现在,才能出现足球、篮球等等那样群众体育性的体育运动。大妈们的广场舞望着接近是很松散的权且的团聚,其实私自如故组织化的结果。

近日答应第③个难点。多个精光面生的人坐在牌桌上为啥一下子就能变成熟人呢?这一个情状有点类似我们组团骑行,车上的旅行者是一心素不相识的,但过不了多短时间,你就会发现,这几个观察者之间一度有了累累相互熟识的小团体。其实那也与理毛活动有关。那个坐在一起打牌的人,或坐在一个车上旅游的人,他们中间的调换,就类似大猩猩之间的理毛,那种面对面包车型大巴理毛—打牌(聊天),拉近了互相之间的相距。

叁 、天生八卦

理毛是灵长类动物之间发展社交的根底,通过理毛建立社交活动的显效,鲜明是跨物种的,作者家的黄狗一初始对四只小猫轻则狂吼,重则压在裆部咬之,但经过猫狗之间相互的舔毛、磨蹭、捉虱子的理毛活动,小狗已经对小猫温柔许多,进而建立了跨物种之间的贵重的和平局面,能够在秋夜微凉中拥抱在联合署名取暖。

理毛,能够确立跨物种的友情。再譬如,为何猫啊,狗啊,甚至狮子、老虎那样的猛兽,只要它们能让你把手放在它们的头上让您抚摸,它们就会立马乖顺下来。大家家的老猫和黄狗之所以不或者建立友谊,恰恰便是它们之间不或然展开理毛活动,而当黄狗力压小猫时,倒是意内地给小猫和小狗带来了意外的亲密无直接触,小猫的理毛为友好获得了黄狗的情谊。

理毛这一社交活动,对于猿类社会前进产生了深入的震慑,不光是我们今后的过多游玩娱乐活动正是那种基因遗传的结果,包含大家前天爱八卦、八婆也是理毛活动的副产品,无论是七个巾帼在联合署名的养父母里短,依旧多个丈夫在共同的胡吹乱侃,都以理毛时养成的习惯。试想一下,五个猿类在协同理毛时,当然会嘀嘀咕咕的说着其他猿类的传言。

而进一步深入的震慑是,在理毛时,猿类得以掌握一件事:哪个人才是和本人是一伙的?哪个家伙在背后议论作者?于是,那就分出了亲疏之别,进而就会冒出派系、团伙。能够说,人类明天整整的社会行事,在几百万年前的澳洲原始森林里的多少个猿类相互理毛时就已经控制了。

当猿逐级进化成人,体毛退化了,用不着互相理毛了,但爱好凑在一起吹吹牛,八卦一下那种习惯却保留了下去,于是乎,找到一个能够代替的方案势在必行,几人在联合署名打闹游戏,下下象棋什么的,不正是最好的点子啊?看看未来的人,与其说是在打麻将,不如说正是找个机会共同八卦。乃至三姑们欣赏一起玩广场舞,也是如此。

差不多能够说,游戏正是猿类理毛最优的替代方案。

而前日,大家便是通过差异的八卦分别出了什么人才是团结人,和哪个人不可能鸟到三个壶里,这就能表明为何在三个大腕绯闻的情报上面,只怕某些热点话题,会有两派差异的人,就像是有不共戴天之仇一样互相攻击。

八卦,就是现行反革命人类的相互理毛。很多个人为贰个八卦争得面红耳赤,甚至打架,其实他们关怀的一直不是八卦中的什么人是何人非,而是经过八卦,他们找到了同类。

能够一定,在一个猿类社会中,不能够给其他猿理毛,或许没有其他猿给本人理毛,那样的猿一定会最早死掉,它的基因肯定不能够传下来。嗯,你自作者于是会油然则生在这几个世界,肯定是拥有远古那只爱八卦的猿的基因的由来。

猿类通过相互理毛,交流了相互之间的消息,建立了友情,扩张了社交圈,进而建立了温馨的小团队,稳步形成了祥和的影响力,更进一步地引发更加多的观者,那样也就有了挑衅并存秩序的力量,很精晓,这几个时候自然是杀死本人的十分,黄袍加身,老子也要过过当老大的瘾,小打小闹也要杀死其他猿类,抢越来越多女猿。

肆 、社交偏好

咱俩家的猫狗通过互动的舔毛、磨蹭、捉虱子—-也正是互相理毛,相当慢化解了种族鸿沟,达成了和平共识,小编不明了猫狗之间是还是不是能够读懂相互之间的言语,不过经过身体语言,它们仍是能够够读懂相互的表明,这几个历程实际上就是为猫狗建立了一种社交纽带。

作者们由此是群居动物,恰恰也是因为远祖猿类在相互理毛时就已经演变出了创制社交纽带的基因,孤独的人,不但是没脸的,而且也十分小大概有滋生后代的或许,因为早已经被升高杀死了。

大家一出生就被扔在贰个应酬漩涡里,从家中、幼园、高校,到步入社会,其实都以在不断扩展本人的社交半径,创设和谐的社交互连网,大家和认识或不认识的人,由生疏到熟谙,或从熟习到路人,在那之中扮演决定性因素的,大概都以我们毫不经意的废话—也正是八卦。

咱俩能不可能和人家建立持久的优质关系,可能并不是我们对有个别宏观议题,如宗教、艺术、法学、政治、经济等等,有着共同的意见,而是大家对互相的提供的闲言碎语、是是非非怀有臭味相投的爱好,这么些闲言碎语、是是非非,正是八卦。你大可不必为此感到惊奇,社会心情学家Nicolas·埃姆勒就发现,人们的说道内容十分之八-十分九都是闲言碎语,国际上的政治巨头、富可敌国的百万富翁私行的闲谈,都以这么。

能够说,八卦是交际的佐料,为互相之间打开互动局面提供了润滑剂。当然,八卦不承担提供其他实质,或然为探索精神提供线索。由此,无论是从多少个里面包车型地铁闲聊、八卦中找不到工作的原形,正是在前些天应酬网络的争辩中,也照样鞭长莫及获得工作的本来面目。那就能够解释,为啥社交媒体上,腾讯网恐怕微信朋友圈,蜚言会如此之多,因为蜚语恰恰正是八卦内容中最好的谈话的资料。浮言最后被我们遗忘,不是因为精神让蜚言破灭,而是因为旧的流言飞语已经让大家不感兴趣。

争论媒体上或生活中,充斥着种种各个的谣传,还证实了二个题目,为何大家难以完毕独立思想,而连日人云亦云?大家是通过友好建立的应酬互联网中的各类人对友好的见识来确立本身认知的,马克思·韦伯说:“人类是悬挂在祥和编织的意义之网上的动物。”那么些意思之网的意思是什么来的,其实便是人家赋予给协调的观点、评价的综合。由此,可以这么说,我们是悬挂在友好编织的社交互联网上的动物。

也正是说,要达成真正的独自思想太难了,至少你要当先本人编织的应酬互联网上的超越五成人的所谓的主流认知,对于超越1/2的人的话,那差不多是不容许的。那犹如能诠释很多难题,自新浪、微信兴起以往,带了1人民学习的狂潮,各样读书社会群众体育、圈子、付费内容,我们跟在千丝万缕的大师或大v屁股前边,但却很少有人真正通过这个学习能够让自身的认知升级,其实原因就在于,我们一窝蜂的热情高涨,不是在于真的要学到什么—当然,很多大师或大v也没有啥样事物让我们学习,他们只可是是提要求了信众许多的八卦谈话的资料罢了。

本来,闺蜜之间或三五基友一起扯扯八卦并无不可,甚至面对面目可憎的路人无的放矢、心口不一地说说天气,也是在理。但后天大家把社交纳入到了1个品牌市集运作的主干能力,那那种社交到底是何等呢?我们平时说,和讯营销、社会群众体育经营销售甚至新媒体经营销售、内容营销的重点内容也是应酬,那里的张罗又是哪些吗?这几个内容都将在小编的付费专栏拓展分享。

五 、舆论利器

理所当然,无论是2个大猩猩,抑或是我们远祖类人猿,想要在团结的族群中得到更大的影响力,仅仅注重理毛是力不从心吸引越来越多的观众的,手工业理毛毕竟是有宏伟的局限性,很鲜明,倘使有一种手段(抑或工具)能够给越多的大猩猩或猿类进行理毛,哪不就能够一石两鸟吗?语言的出现便是理所当然的,邓巴就认为语言就在原始人理毛的时候形成的。唯有大猩猩或猿类驾驭了言语这一利器,才能让它们在原始森林的残暴竞争中获取优势,结果正是大猩猩受制于语言能力的钳制,近来不得不沦为到实验室或动物园供自身的远亲猿类的子孙——人类进行试验或参观。

人类精通了言语之后,终于把本人的理毛这一社交活动的效劳发挥到了更高的层系,有了言语之后,人类的社交活动就越来越丰盛多彩,人类的组织化得以进步。通过一对一的手工业理毛去和各类类人猿(原始人)建立社交关系,灌输自个儿的大好主张,鲜明太过低效,有了语言之后,登高级中学一年级呼,就足以覆盖全体族群,让拥有猿人(原始人)都热血沸腾,那功效当然乐意。

言语的威力,在首先个原始人站在最高石头上对下边黑压压的人工胎盘早剥开始展览动员的时候,就起来表现,到近期的应酬媒体上,所谓的大v感受到自身在浏览观众的私信就好像皇帝批阅奏章的痛感,当中所反映的通晓舆论的权杖所带来的快感,其实是一脉相通的。

舆论从某种程度上的话,便是一种理毛活动。要明了,猿类通过理毛活动,也是拓展一种舆论活动,因为音信能够在理毛时开始展览调换传播。受制于猿类(原始人)的技术手段,它们并未媒人,只好通过手工业理毛来交流音讯。但有了言语、文字之后,那种舆论的威力更为彰显。而现代社会的红娘,越发是应酬互联网的兴起,改变了猿类只好靠双臂理毛的限量,一条博客园能够给广大人理毛。

四个妇女之间,若是没有怎么共同的八卦话题,能够一定相当的小概变成好对象,就如四个丈夫之间,假使没有推杯换盏的一起醉过,也相当的小只怕成为贴心,因为缺少了相互互相“理毛”,是很难建立信任的。很四个人,之所以能够选择社交媒体获得很多死忠,恰恰是控制了舆论来给受众进行理毛的机密。

从某些层面上来讲,当代的地缘政治的竞争,早就突破实际上的地理边界——地图上划定的领土的分界线,而是通过网络早已经编织成的互联网舆论实行真正的跨国界的环球化的散文之战。欧洲和美洲舆论的利器是怎么着啊?便是普世价值,大约全球特别是前进中的国家如中东、东欧等地区,早已经领教了它的决意。前几年华夏也被这些击溃得力不从心动弹。协作普世价值的行动战略是怎样吗?正是颜色革命。中中原人民共和国为了拓展反制,最后提议了协调的力主:营造人类时局欧洲经济共同体,行动战略正是“一带一同”。

扯远了,就此打住。

4.1 标准定点服务

上面介绍下 CLLocation 对象:

CLLocation 对象属性方法:

根本格局:distanceFromLocation

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

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


正文相关目录:
================== 所属文集:【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 地图框架Map基特效率1:地图呈现
7.4 定位服务->3.2 地图框架Map基特成效2:路线规划(导航)
7.4 定位服务->3.3 地图框架MapKit效能3:3D视图
7.4 定位服务->3.4 地图框架MapKit效率4:地图截图
地理,7.4 定位服务->3.5 地图框架MapKit作用5:POI检索
================== 所属文集:【iOS】07
设备工具
==================

4.0 二种固定服务

正文目录:


4.2 明显地点变动的一定服务

2.0 属性方法

CLLocationCoordinate2D:是2个用来表示经纬度的结构体

至于经纬度:

有关经纬度

distanceFilter:每隔多少米定位二遍

desiredAccuracy:设置一定精确度


【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")
【代码托管平台】

Github

3.0 requestLocation:单次定位请求,获取1遍地方消息


合法框架CoreLocation目录:


【如有疑问,请通过以下格局调换】

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

本文版权归我和本网站共有,欢迎转发,但未经小编同意必须保留此段表明,且在文章页面鲜明地点给出原文连接,感激合营。


恒定目录:

【小说揭露平台】

简书
博客园

Gitbook(假设认为小说太长,请阅读此平台发表的篇章)

正文并非最后版本,假使想要关切更新或校订的内容请关怀文集,联系格局详见文末,如有大意和疏漏,欢迎指正。

1.0 简介


【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]

本文源码 德姆o 详见 Github
https://github.com/shorfng/iOS\_7.0\_Device-Tools


作者:蓝田(Loto)

相关文章

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