精华内容
下载资源
问答
  • 主要介绍了Android 监听手机GPS打开状态实现代码的相关资料,需要的朋友可以参考下
  • 最近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的。我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置。经过2天研究和...
  • 第二种可能性,当手机监听到用户从浅睡进入深睡状态时,立即播放短促躁音,使退回浅睡,达到睡眠破坏的目的;对于这种木马程序,本软件也能防御,使其不能录到用户睡眠鼾声。第三种可能性,手机内基于声波定位或声波...
  • 第二种可能性,当手机监听到用户从浅睡进入深睡状态时,立即播放短促躁音,使退回浅睡,达到睡眠破坏的目的;对于这种木马程序,本软件也能防御,使其不能录到用户睡眠鼾声。第三种可能性,手机内基于声波定位或声波...
  • 手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。...

    手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小,误差会超过一公里。前者定位精度较高。此外还有利用Wifi在小范围内定位方式。

    一、区别

    最新的手机定位技术是AGPS(AssistedGPS:辅助全球卫星定位系统),它利用通讯基站信息来辅助GPS模块进行手机定位,主要改进之处在于:

    1、在室内没有GPS信号的地方利用基站定位来提供位置信息,缩小定位盲区。

    2、与纯GPS和纯基站定位相比,AGPS有更高的精度,一般可精确到10米;GPS定位需要在终端安装GPS定位系统或是内置GPS模块,由终端主动发送位置信息,服务器端无法获取某个终端的位置信息。

    3、LBS基站定位是基于通讯运营商信号塔的定位方式,通过信号塔获取到手机SIM卡的经纬度信息,通过计算将该位置点通过与电子地图API进行对接显示示到地图上面,达到定位的目的。同时LBS基站定位具有强制性,由基站定位服务器端主动向终端发起定位,在监管类服务中起着重要作用。

    GPS定位运用的是卫星信号,在室内、地下车库、交通隧道定位信号会受到影响增加定位偏差,甚至在云层密集的地域卫星信号也会受到限制使得定位精度不高或出现定位盲区。在未来的实际应用中,单纯的GPS定位和单纯的基于基站定位都无法完成一个具体需求环境的要求,一定是卫星定位加基站定位两种方式并存的。 

    首先,LBS基站定位的定位方式属于地表定位,所有信号来源于手机信号塔,只要手机能接收到信号的地方都能实施定位,基站定位信号在地面建筑物、隧道中有极强的穿透性,弥补了卫星定位的不足之处。其次,LBS具有强制性,在终端不请求位置的时候,可进行主动定位,LBS基站定位具有较强的监管能力。

    在GPS模块启动搜星阶段,通过基站定位来确定定位手机的大概位置,通过预存在手机中的GPS卫星星历图,可以快速搜星,把搜星阶段的时间由2-3分钟,缩短到10秒钟左右。

    二、知识

    第一、某些影视作品为了增加观赏度和悬念,错误的将手机定位描述为必须通话一定时间才可定位成功。而实际上,只需要被定位手机开机,根本不用通话就可实施定位。

    第二、手机关机由于没有信号发射,基站无法抓取到被定位手机的信号,无法实施定位。

    第三、手机定位是对手机卡定位,而不是对手机定位。被定位的手机号码只要开机,无论更换任何手机都可正常定位,但是无法对原使用的手机机身串号进行定位。

    第四、被定位手机号码设置来电转接,等同于手机关机,是通过转接到其他号码实施通话的,这种情况同样无法定位。

    三、定位特点

    覆盖率高

    一方面要求覆盖的范围足够大。另一方面要求覆盖的范围包括室内。用户大部分时间是在室内使用该功能,从高层建筑和地下设施必须保证覆盖到每个角落。手机定位根据覆盖率的范围,可以分为三种覆盖率的定位服务:在整个本地网、覆盖部分本地网和提供漫游网络服务类型。除了考虑覆盖率外,网络结构和动态变化的环境因素也可能使一个电信运营商无法保证在本地网络或漫游网络中的服务。

    定位精度

    手机定位应该根据用户服务需求的不同提供不同的精度服务,并可以提供给用户选择精度的权利。例如美国FCC推出的定位精度在50米以内的概率为67%,定位精度在150米以内的概率为90%。定位精度一方面与采用的定位技术有关,另外还要取决于提供业务的外部环境,包括无线电传播环境、基站的密度和地理位置、以及定位所用设备等。

    四、典型应用

    家长定位老人、儿童:主要是出于安全和关心的需要,安装在老人儿童的手机上,一旦走失,发送短信即可获得老人儿童的具体地图位置。

    企业对车辆的管理;GPS信号通过卫星传输,受云层和遮挡物限制,在阴天、地下室、隧道等情况下会没有信号从而产生定位盲区。而基于SIM卡的定位技术也就是我们所说的地面定位——企效通LBS基站定位能够有效的对地面上的位置反馈回位置信息。LBS基站定位省去了终端成本,现有手机终端就能直接使用,从而节省了整个项目成本。LBS适合监管类定位需求,连续定位通讯资费比较高。

    企业对员工的管理;能提供对于有多个分部的销售公司,对销售人员上班时间工作的管理  ;代表软件:企效通。企效通主要采用基站定位,可以对外勤员工进行手机定位,实现移动考勤、行程管理、轨迹查询、拜访管理等,提高员工工作效率,减少差旅费用。

    进行远程解码,对方号码所在手机或者固话的内部程序,绑定他的号码,绑定完后就可以进行不限制距离的监听,拦截,定位功能。

    五、原理

    手机定位是指通过无线终端(手机)和无线网络的配合,确定移动用户的实际位置信息(经纬度坐标数据,包括三维数据),通过SMS、MMS、语音发给用户或以此为基础提供某种增值服务。定位服务又叫做移动位置服务(Location Based Service,LBS),它是通过电信移动运营商的网络(如GSM网、CDMA网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。 

    手机定位是利用GSM移动通信网的蜂窝技术来实现位置信息的查询,GSM无线通信网是由许多像蜜蜂蜂窝一样的小区构建而成的,每个小区都有自己的编号,通过手机所在小区的识别号就可以知道手机所在区域。目前手机小区定位技术尚在完善之中,市区精度范围大致在200米左右,郊区精度范围大致在1000米~2000米左右,随着移动公司技术的不断发展,相信精度会进一步提高到50米范围内。同时目前显示的地标名还在优化之中,随着进一步优化,地标将更加准确。 

    蜂窝定位技术又属于LBS基站定位,该定位方式俗称为地面定位系统,因为它是依靠运营商分布在地表上的信号塔来获取的经纬度信息确定终端的位置。所有手机卡只要在激活状态,并能正常的接打电话就能够精准定位到,定位能力强,定位信号能有效穿透建筑物、地下室、隧道交通等。每一张手机卡都有唯一的一个识别码,就像打电话一样,每个号码都唯一的指向固定的一部手机,LBS基站定位也能够有效的通过该识别码来找到某个固定的号码手机所在的位置,并呈现到电子地图上,此类定位技术具有一定的强制性,在一些监管类领域有着广泛应用。

    六、移动定位

    移动定位系统是指通过无线终端(如手机、PDA 等)和无线网络的配合,确定移动用户的实际位置信息(经纬度坐标数据),从而提供用户所需的与位置和方向相关的增值服务。移动位置服务最早是从美国开始的。早在1996 年,美国联邦通信委员会(FCC )要求移动运营商为手机用户提供紧急求助服务,即提供呼叫者的位置以便及时救援,他们将这种移动位置服务命名为E911 。此后,日本、德国、法国、瑞典、芬兰等国家纷纷推出各具特色的商业化的位置服务。目前,世界许多国家都以法律的形式颁布了对移动位置服务的要求,如美国“ US FCC E 911 ” 以法律的形式规定了运营商为911 用户提供的定位服务精度标准,而欧盟也颁布法律,遵循“ US FCC ”标准,并于2003-1-1实施。 顺便提及的是,定位服务已引起人们对隐私权的关注。无线通讯公司和监管者必须研究政策允许用户在输入地址信息时,其个人隐私权受到保护。

    星机高科GPS定位手机是提供给特需人群遇险时一键报警求援、110、120救护快速确定目标位置、家长对老幼外出行走位置查询、安全监护的报警定位手机,也可以用手机从GPS手机上获去报警信息,是个人安防、亲情关爱的“随身保姆”。适用与有遇劫、遇困、迷路、走失、急性病(心脏、高血压)突发、遇灾可能的需紧急报警求助人群及儿童、老人、智障等需监护人群。

    七、联通定位

    定位之星业务是中国联通CDMA1X网络采用先进的GPSONE定位技术向公众提供的高精度定位业务。定位精度在室外环境下高达5米~50米。同时无论在室内还是室外,只要CDMA1X网络覆盖到的地方即可实现定位,而且缩短了定位时间。联通无限定位之星业务基于对移动终端的定位,结合GIS(地理信息系统)地图数据信息,能够向用户提供丰富的位置信息服务。

    “互动视界”业务是中国联通公司为CDMA用户提供的一项无线上网服务,你只要使用支持WAP1.2以上的浏览器功能的手机终端,其操作也类似于中国移动的WAP版定位。目前联通对于手机的数据通信资费标准是0.01元/kB。

    我们在这里通过一个实例向大家说明GPS的使用:进入定位功能,屏幕上便出现了卫星画面,经过几秒至十几秒的查询时间之后,屏幕上便显示出目前手机所处位置的描述,如“万泉河路,万全新新家园附近”之类的语句,这时用户便可进一步查询当前位置的地图、去往某地的公交换乘路线、周围500米~2000米的餐饮、娱乐服务场所等。如我们再继续查询“百盛”,搜索到百盛购物中心,便会给出百盛的详细位置和联系电话,并且能够显示出从手机所在位置去百盛的公交换乘路线。

    看了上面的描述,是不是感觉很方便。尤其是对于一些天生的“路盲”朋友,手机定位功能一定会帮助你解决不少的出行问题。

    全球定位系统(GPS)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座己布设完成。

    短信版手机定位

    短信版的手机定位可以在全国范围内使用,一般在省到较精确位置,出内能定位省区后可以定位到具体的地区名(按照区号来区别)。短信费为0.10元/条,信息费为6元/月,这个信息费一般相当于月租费。

    WAP版手机定位

    只要拥有一部支持WAP功能的手机,开通WAP功能后,可以通过无线方式直接联入互联网,获取自己当前的位置。假如你在浙江省,当在手机上启动自己的WAP浏览器后,这时在浏览器中输入网址 ,然后点击菜单进入业务就可以找到自己的位置。

    其他手机定位

    这是一种新型的手机定位技术。但由于涉及侵犯隐私,而未被广大群众所知晓。这种手机定位并非传统的GPS定位,而是基于对基站信息信号反馈而锁定手机位置。也就是法。目前为止,这种手机定位手段仅仅限于公安技侦破案时使用。只需要知道手机号码,并且机主开机有信号,就可以锁定机主位置。由于LBS受基站信号、天气、无线电波等信号的干扰,精确度尚不是特别理想。市区约在50M-200M左右。

    目前国内绝大多省份使用手机定位均需得到手机用户的授权才能进行。

    手机定位业务有一个超出传统增值业务的庞大产业链阵容,由移动运营商、系统设备提供商、终端厂商、GIS开发商、应用提供商、中间件提供商等多个环节组成,综合运用了包括移动通信、卫星导航、互联网、地理信息系统、综合信息服务等多方面的技术和应用,是多个产业、多项技术交汇和融合的产物。手机定位服务需要持续和巨大的投入,尤其是在网络升级和电子地图方面。

    八、其他定位

    在移动通信网络中,通常有以下几种定位技术:

    一是基于Cell ID的定位技术,它由网络侧获取用户当前所在的基站Cell信息以获取用户当前位置,其精度取决于移动基站的分布及覆盖范围的大小;

    二是基于AFLT的定位技术,AFLT(Advanced Forward Link Trilateration)是CDMA独有的技术,在定位操作时,手机/终端同时监听多个基站的导频信息,利用码片时延来确定到附近基站的距离,最后用三角定位法算出具体位置。

    三是基于AGPS(无线网络辅助GPS定位技术)的定位技术,AGPS将终端的工作简化,由网络侧的定位服务器与终端相互配合完成定位工作,就是将卫星扫描及定位运算等最为繁重的工作从终端一侧转移到网络一侧的定位服务器完成。 借助定位服务器强大的运算能力,可以采用复杂的定位算法以降低接收信号弱等不利因素的影响从而提高定位精度和灵敏度。定位平台将经纬度信息送到应用服务平台,或者通过无线网络送回终端满足定位应用。

    四是基于GPSOne定位技术,将Cell ID、CDMA三角定位和AGPS综合应用的电信独特的定位技术,实现定位精度高、范围广。CDMA定位技术是基于位置业务开发的定位技术,采用Client/Server方式。它将无线辅助AGPS和高级前向链路AFLT三角定位法两种定位技术有机结合,实现高精度、高可用性和较高速度定位。在这两种定位技术均无法使用的环境中,CDMA定位技术会自动切换到Cell ID扇区定位方式,确保定位成功率。

    CDMA定位技术结合了无线网络辅助GPS定位和CDMA三角运算定位,改善了室内定位效果。CDMA三角运算定位弥补无卫星信号下也能完成定位,其他蜂窝电话网络如GSM/GPRS也有类似自定位技术,但由于CDMA是惟一全网同步(通过GPS)网络,因此定位精度更高。但CDMA连续定位中,处于同一位置的连续定位偏差往往很大。CDMA手机定位技术2011年已经实现突破,只要手机信号覆盖区域都能实现GPS定位。

    自己想要给别人定位,是要经过别人同意的,比如说给自己的孩子定位,想知道孩子上学、放学以及去了哪儿,那你就CDMA手机给孩子带上,你就可给孩子或者想定位的人定位。

    定位

    卫星定位

    基站定位

    手机定位

    九、服务应用

    手机定位服务应用于汽车救援服务,给汽车救援服务商和车主带来了方便。过去车主的车出现故障,通过打电话的方式说明自己的具体位置,甚至为了说清自己的具体位置要花费上百元的话费,也说不清自己所在位置,但现在只需要打一个电话,回复一条短信就可以定位车主的具体位置,前后花费不到一分钟,不需要在汽车和手机上安装任何东西,相当方便,深受汽车救援行业的喜爱。

    手机定位服务应用于医疗急救,给医疗行业和病人带来了方便。手机定位服务应用于医疗急救采取拨号定位方式,不需要回复短信,病人只需向医院打一个电话就可以被医院方定位,获得病人的具体位置,迅速前往救援,深受病人的喜爱。

    十、服务历史

    中国移动在2002年11月首次开通位置服务,如移动梦网品牌下面的业务“我在哪里”、“你在哪里”、“找朋友”等。

    2003年,中国联通在其CDMA网 上推出“定位之星”业务,用户可以在较快的速度下体验下载地图和导航类的复杂服务;

    中国电信和中国网通启动在PHS(小 灵通)平台上的位置服务业务。

    2008年10月CDMA网成为中国电信手机终端主要应用,目前是中国电信手机以网络CDMA3G、1X网络采用先进的GPSONE定位技术向公众提供的高精度定位业务。定位精度在室外环境下高达5米~50米。同时无论在室内还是室外,只要CDMA 1X网络覆盖到的地方即可实现定位,而且缩短定位时间。中国电信CDMA网的基础上建立LBS移动定位平台,基于对移动终端的定位,结合GIS(地理信息系统)地图数据信息,能够向用户提供丰富的位置信息服务。

    截至2011年底,国内市场上的手机位置服务主要包括:电信CDMA手机GPSOne定位(Cell ID、AGPS和AFLT综合应用技术)、移动手机位置服务、移动A-GPS终端、联通的AGPS。

    十一、手机软件

    手机定位软件是指软件可以通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术。

    手机定位软件的技术有两种,一种是基于GPS的定位(目前市场销售的GPS系统),一种是基于移动运营网的基站的定位。 

    操作平台

    目前国内手机定位软件基本上是基于智能手机开发的,软件可以应用在Symbian、Android、Windows Mobile、Iphone等操作系统的手机上,其中Adnroid操作系统的手机用户数量最多。2012年7月数据,Android占据全球智能手机操作系统市场59%的份额,中国市场占有率为76.7%。《LURKER软件》支持所有Adnroid操作系统手机。

    定位方式

    一是基于移动基站的定位方式;二是现在的手机都带有GPS模块,可以通过卫星定位。两种定位软件大同小异,分为手机端和PC电脑端,可以查看朋友目前所在的位置。

    十二、发展状况

    中国移动和中国联通早在几年前,都相继开通位置服务,但在商业模式和推广上都并未投入太多,也并未有太多的SP参与提供服务,因此定位服务的市场并未启动。人们对于手机定位的认识也仅仅停留在“你在哪,我在哪”这种简单的位置确定层面。艾瑞咨询数据显示: 2005年国内移动定位市场规模仅2.21亿元,主要得益于中国移动亲子通业务和中国联通手机导航业务的推广。但在2006~2008年,移动定位市场将保持150%以上的增长率,预计2008年将达到52.5亿元。如今,无论是运营商还是SP都希望利用3G的机会,推进手机定位服务行业的成熟和发展。 

    相比其他手机增值服务来讲,手机定位的产业链条非常庞杂,包括移动运营商、GPS定位技术、GIS电子地图提供商、POI(Position of Interest)信息采集和服务提供商、终端厂商、中间件提供商等,涉及到移动通信、卫星导航、互联网、地理信息系统、综合信息服务等多个领域。总体上,产业链在移动运营商的主导下,开放平台合作。目前产业链上的各个环节都处于刚刚起步阶段,提供的定位服务也大多在免费试用阶段,尚未形成成熟的商业模式。相对而言,不少提供电子地图的公司开始浮出水面,并得到风险投资的追捧。

     

    手机定位浅析 AGPS定位 LBS基站定位 卫星定位

     

    严格上讲,手机定位并非3G时代的增值应用,但之所以目前两大运营商都暗自较劲,业内也将手机定位作为3G时代的杀手级应用,关键在于,手机定位的价值在于可以将定位信息运用到许多应用中,从而创造比定位本身更大的价值。

    除了可以利用手机地图进行导航之外,比如定位游戏就将影响到手机游戏产业的格局。另外,通过小区广播的形式,对用户进行精准的无线广告的营销也是手机定位的应用之一。比如当你走到麦当劳餐厅附近时,便会有针对性地向你推送麦当劳优惠券或者新品广告。当然,目前对于定位广告运营商还在思考其营运模式。从行业应用来讲,手机定位则主要应用在车辆调度、物流、监控等领域。尽管手机定位可以和不同的行业应用相结合,但获取衣食住行方面的实用信息、以及基于娱乐的位置游戏等需求仍是个人消费市场的主要应用热点。

    3G的到来,会极大地增强用户对手机定位服务的体验,成为定位服务应用起飞的一个契机。伴随网络条件的改善,移动定位技术和多媒体技术相结合将成为趋势。运营商高速的数据传输能力、成熟的语音业务应用和丰富的数据业务实践使实时画面监控、语音导航与定位技术的结合成为可能。

    目前来看,手机定位除了受到网络带宽限制之外,还受到诸多因素的阻碍。其中最重要的一点是,我国地理信息系统的建设和POI数据的采集、加工、整理、更新,是个相当困难而艰巨的任务。这一点也是和欧美和日韩定位服务不同的地方。“每天都会在修路修桥,每天都会有餐馆开张或倒闭,这些信息要及时更新谈何容易。”业内人士表示,无论是地理信息还是周边的餐馆、银行等综合服务信息,都处于高度变化状态,使得做GIS和POI的公司难度加大,也无形中提高了SP进入该领域的门槛。

    定位技术的精准性不够。尤其是中国移动采用的CELL-ID的技术,根据移动台所处的蜂窝小区ID号来确定用户的位置,因此它的定位精度取决于蜂窝小区的半径。对于精度较高的紧急定位服务时,CELL-ID就无法满足要求。目前,用户熟悉的应用多为“模糊定位”服务,真正的位置服务用户较少。

    用户隐私也是定位服务最容易引发争议的问题,也是阻碍用户消费的重要因素。针对定位服务的敏感性,运营商需要在信用管理、信息安全、个人隐私保护等方面制定完善的流程体系、管理体系、认证体系和管理规范。

    手机终端依然成为制约产业发展的最后一个环节。利用GPS技术的位置服务需要终端的大力支持,否则业务拓展也只是空话。目前能够支持GPSone技术的终端在国内还比较少。中国联通推出的语音导航业务,也只有三星、LG等少数终端手机提供支持。而且居高不下的终端价格,也阻碍了定位业务的普及和推广。

    十三、定位系统

    GPS 定位,GPS导航,这些GPS的应用逐渐让GPS技术为人们所熟知,现在很多智能手机出了新花样来吸引大家的眼球,手机GPS应运而生。手机GPS顾名思义就是在手机上实现GPS的功能,一个就是GPS导航一个就是GPS定位跟踪。

    首先说一下手机GPS,它是手机平台上实现的GPS定位导航功能, 随着科技的发展,必定还会有更多的应用。这很容易理解,就是手机出了一般的手机通信的功能如发短信、打电话、拍照、MP3等这些基本的功能之外,还可以用手机来实现GPS定位导航。目前所说的GPS手机也就是具有导航功能的手机,所以GPS手机也可以称为GPS导航手机或具有GPS导航功能的手机。

    多重因素影响手机GPS普及

    在手机中集成GPS,可以非常轻松地实现车辆的自主导航,用户将不再因为迷路耽误自己的行程,便捷而实用。越来越多带GPS功能的手机反过来将会推动位置服务(LBS)的发展。另一个促使在手机中集成GPS功能的因素是政策的导向,国家的政策大力支持促进的手机GPS的发展。

    GPS芯片的接收灵敏度越高,搜星速度越快,功耗越低,使用就会越方便,用户使用就会越广泛。但是GPS的信号非常弱,任何干扰都会影响到它的接收效果和产品性能。因此GPS产品的设计优化程度对产品的性能会产生极大的影响,从而影响用户对GPS产品的认可和接受程度。GPS系统的成本包括GPS模块、GPS处理器等相关元器件和地图的价格,导致GPS系统的成本和价格相对较高,很多用户现在都还不能承受这个价格。不过随着成本的降低和技术的进步,许多终端厂商和手机设计企业正在推出相应的方案和产品,手机GPS芯片和解决方案呈现出软硬方案之争,功耗和接收灵敏度成为关注重点。 

    手机定位系统,它是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。

    手机定位系统不一定是手机GPS定位,首先说一下定位技术,定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小。前者定位精度较高。此外还有利用Wifi在小范围内定位的方式。

    手机定位分类

    手机定位系统按照提供服务的方式可以分为两种:自有手机定位系统与公用定位系统。根据手机的不同的功能可以有可以分为两种定位,短信版手机定位和WAP版手机定位。合理的使用这些定位系统,可以给生活或者工作提供很多便利。

    通过分析了手机GPS以及手机定位系统,可以看出二者的区别和联系,尽管现在手机集成GPS已经被使用,但还不普及,随着GPS技术的发展以及手机的性能的改善,手机GPS以及手机定位系统应该都会成为手机的基本的功能之一。

    展开全文
  • Android 监听手机GPS打开状态

    千次阅读 2017-04-27 15:04:22
    // 通过GPS卫星定位定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快) boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // 通过WLAN或移动...

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854942
    本文出自【赵彦军的博客】

    • GPS_Presenter
    package com.yiba.core;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.location.LocationManager;
    
    /**
     * Created by ${zhaoyanjun} on 2017/3/29.
     * GPS 开关监听
     */
    
    public class GPS_Presenter {
        private Context mContext ;
        private Receiver receiver ;
        private GPS_Interface mInterface ;
        private String GPS_ACTION = "android.location.PROVIDERS_CHANGED" ;
    
    
        public GPS_Presenter(Context context , GPS_Interface mInterface ){
            this.mContext = context ;
            this.mInterface = mInterface ;
    
            observeWifiSwitch();
        }
    
        private void observeWifiSwitch(){
            IntentFilter filter = new IntentFilter();
            filter.addAction( GPS_ACTION );
            receiver = new Receiver() ;
            mContext.registerReceiver(receiver, filter);
        }
    
        /**
         * 释放资源
         */
        public void onDestroy(){
            if ( receiver != null ){
                mContext.unregisterReceiver( receiver );
            }
            if (mContext!=null){
                mContext = null;
            }
        }
    
        class Receiver extends BroadcastReceiver {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().matches( GPS_ACTION )) {
                     if ( mInterface != null ){
                         mInterface.gpsSwitchState( gpsIsOpen( context ));
                     }
                }
            }
        }
    
        /**
         * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
         * @param context
         * @return true 表示开启
         */
        public boolean gpsIsOpen(final Context context) {
            LocationManager locationManager
                    = (LocationManager) context.getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
            // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
            boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
            boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            if (gps || network) {
                return true;
            }
    
            return false;
        }
    }
    
    • GPS_Interface 回调接口
    package com.yiba.core;
    
    /**
     * Created by ${zhaoyanjun} on 2017/3/29.
     * gps 开关监听
     */
    
    public interface GPS_Interface {
        void gpsSwitchState( boolean gpsOpen );
    }
    
    • 在 Activity 中使用
    package com.yiba.core;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity implements GPS_Interface {
    
        private GPS_Presenter gps_presenter ;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            gps_presenter = new GPS_Presenter( this , this ) ;
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            //释放资源
            if ( gps_presenter != null ){
                gps_presenter.onDestroy();
            }
        }
    
        @Override
        public void gpsSwitchState(boolean gpsOpen) {
            if ( gpsOpen ){
                Toast.makeText(this, " 手机GPS 打开", Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(this, " 手机GPS 关闭", Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    展开全文
  • spiderman这个工具用来在手机端显示安卓程序的崩溃日志,方便快捷,可以快速定位,简直是开发小哥哥的小棉袄,测试小姐姐的小心肝!
  • 手机定位软件-适合定位小孩,老人,保护家人安全】 下面说一下免费制作手机定位软件的实现方法,需要了解的朋友需要耐心的看完下面的内容,讲解通俗易懂,分几部讲解 第一步:拨打运营商电话,索要固定ip地址 1....

    【手机定位软件-适合定位小孩,老人,保护家人安全】

    下面说一下免费制作手机定位软件的实现方法,需要了解的朋友需要耐心的看完下面的内容,讲解通俗易懂,分几部讲解

    第一步:拨打运营商电话,索要固定ip地址

    1.运营商会告诉你ip资源紧缺,告诉他们,自己买的摄像头需要固定ip,如果他们还是不给,就告诉他们,不给就去工信部投诉,因为固定ip的钱,开宽带时已经出了的
    2.有了固定ip,网上输入自己光猫的配置网站,我这边是电信,如下图,外部端口是互联网访问自己电脑或者手机的端口,内部端口是自己电脑或手机文件的端口
    在这里插入图片描述

    第二步:网上下载KSWEB,或者加我qq846988356分享给你

    1.为主机配置本机文件的端口
    2.手机文件管理器中 的htdocs文件夹 就是存放html,js,css,php等文件的地方
    在这里插入图片描述

    第三步:上百度地图定位,申请开发者账号

    链接:百度地图定位
    1.填写图中的内容
    2.保存访问应用AK,后面会用到
    3.下载定位开发包
    链接:定位开发包
    在这里插入图片描述在这里插入图片描述

    第四步:打开Android Studio

    1.导入开发包(鼠标右键在这个位置,Add as Library),OK确定
    在这里插入图片描述

    发送端源码:

    (LocationActivity.java)
    这是只是改了个名字,刚创建android工程时,名字是MainActivity.java

    package com.baidu.location.demo;
    
    import com.baidu.send.R;
    import com.baidu.location.BDAbstractLocationListener;
    import com.baidu.location.BDLocation;
    import com.baidu.location.service.LocationService;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.text.method.ScrollingMovementMethod;
    import android.util.Log;
    import android.widget.TextView;
    import org.json.JSONObject;
    import java.io.DataOutputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class LocationActivity extends Activity {
        //先定义动态获取权限
        private static final int REQUEST_EXTERNAL_STORAGE = 1;
    
        private static final String[] PERMISSIONS_STORAGE = {
                "android.permission.READ_EXTERNAL_STORAGE",
                "android.permission.WRITE_EXTERNAL_STORAGE" };
        //然后通过一个函数来申请
        public static void verifyStoragePermissions(Activity activity) {
            try {
                //检测是否有写的权限
                int permission = ActivityCompat.checkSelfPermission(activity,
                        "android.permission.WRITE_EXTERNAL_STORAGE");
                if (permission != PackageManager.PERMISSION_GRANTED) {
                    // 没有写的权限,去申请写的权限,会弹出对话框
                    ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.location);
            verifyStoragePermissions(this);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            LocationService locationService = ((LocationApplication) getApplication()).locationService;
            locationService.registerListener(mListener);
            //注册监听
            int type = getIntent().getIntExtra("from", 0);
            if (type == 0) {
                locationService.setLocationOption(locationService.getDefaultLocationClientOption());
            } else if (type == 1) {
                locationService.start();
            }
           locationService.start();
        }
    
        private BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation location) {
                if (null != location && location.getLocType() != BDLocation.TypeServerError) {
                    String address=location.getAddrStr();
                    String path="你自己的公网ip+端口+xxx.php";
                    //比如:http://123.122.108.135:8011/send.php
                    new Thread(() -> postTask(address,path)).start();
                }
            }
        };
    
        private void postTask(String address,String path)  {
            try {
                URL url=new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setConnectTimeout(5000);
                conn.connect();
                Map<String,String> data=new HashMap<String,String>();
                @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                Date date=new Date(System.currentTimeMillis());
                data.put("address",address);//这是提交地址
                data.put("period",simpleDateFormat.format(date));//这里提交时间
                JSONObject response=new JSONObject(data);
                Log.i("提交的数据是:",response.toString());
                OutputStream os=conn.getOutputStream();
                DataOutputStream objout=new DataOutputStream(os);
                objout.write(response.toString().getBytes());
                objout.flush();
                os.close();
                objout.close();
                int code=conn.getResponseCode();
                if(code==200){
                    Log.i("请求码:", String.valueOf(code));
                }else{
                    Log.i("连接错误:",String.valueOf(code));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    (LocationService.java)

    package com.baidu.location.service;
    
    import com.baidu.location.BDAbstractLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.location.LocationClientOption.LocationMode;
    import android.content.Context;
    
    public class LocationService {
        private static LocationClient client = null;
        private static LocationClientOption mOption;
        private static LocationClientOption  DIYoption;
        private Object objLock;
    
        public LocationService(Context locationContext) {
            objLock = new Object();
            synchronized (objLock) {
                if (client == null) {
                    client = new LocationClient(locationContext);
                    client.setLocOption(getDefaultLocationClientOption());
                }
            }
        }
    
        public boolean registerListener(BDAbstractLocationListener listener) {
            boolean isSuccess = false;
            if (listener != null) {
                client.registerLocationListener(listener);
                isSuccess = true;
            }
            return isSuccess;
        }
    
    
        public static boolean setLocationOption(LocationClientOption option) {
            boolean isSuccess = false;
            if (option != null) {
                if (client.isStarted()) {
                    client.stop();
                }
                DIYoption = option;
                client.setLocOption(option);
            }
            return isSuccess;
        }
    
    
        public LocationClientOption getDefaultLocationClientOption() {
            if (mOption == null) {
                mOption = new LocationClientOption();
                mOption.setLocationMode(LocationMode.Hight_Accuracy); // 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
                mOption.setCoorType( "bd09ll" ); // 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
                mOption.setScanSpan(5*60*1000); // 可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
                mOption.setIsNeedAddress(true); // 可选,设置是否需要地址信息,默认不需要
                mOption.setIsNeedLocationDescribe(true); // 可选,设置是否需要地址描述
                mOption.setNeedDeviceDirect(false); // 可选,设置是否需要设备方向结果
                mOption.setLocationNotify(false); // 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
                mOption.setIgnoreKillProcess(true); // 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop
                mOption.setIsNeedLocationDescribe(true); // 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation
                mOption.setIsNeedLocationPoiList(true); // 可选,默认false,设置是否需要POI结果,可以在BDLocation
                mOption.SetIgnoreCacheException(false); // 可选,默认false,设置是否收集CRASH信息,默认收集
                mOption.setOpenGps(true); // 可选,默认false,设置是否开启Gps定位
                mOption.setIsNeedAltitude(false); // 可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
            }
            return mOption;
        }
    
        public void start() {
            synchronized (objLock) {
                if (client != null && !client.isStarted()) {
                    client.start();
                }
            }
        }
    }
    
    

    (Location.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
    </LinearLayout>
    

    (AndroidManifest.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.baidu.send">
        <!-- 这个权限用于进行后台定位-->
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
        <!-- 这个权限用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <!-- 这个权限用于访问GPS定位-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
            tools:ignore="ScopedStorage" />
        <!-- 访问网络,网络定位需要上网 -->
        <uses-permission android:name="android.permission.INTERNET"/>
        <!-- 允许挂载和反挂载文件系统可移动存储 -->
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
            tools:ignore="ProtectedPermissions" />
        <!-- 允许程序读取底层系统日志文件 -->
        <uses-permission android:name="android.permission.READ_LOGS"
            tools:ignore="ProtectedPermissions" />
        <!-- 允许访问振动设备 -->
        <uses-permission android:name="android.permission.VIBRATE"/>
        <!-- 允许使用PowerManagerWakeLocks保持进程在休眠时从屏幕消失 -->
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <!-- 允许程序读取或写入系统设置 -->
        <uses-permission android:name="android.permission.WRITE_SETTINGS"
            tools:ignore="ProtectedPermissions" />
        <!-- android 9.0上使用前台服务,需要添加权限 -->
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
        <!-- 用于读取手机当前的状态 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!-- 读取缓存数据 -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <!-- 获取模拟定位信息 -->
    
    
        <application
            android:name="com.baidu.location.demo.LocationApplication"
            android:allowBackup="true"
            android:persistent="true"
            android:usesCleartextTraffic="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Black">
    
            <!-- 声明service组件 -->
            <service
                android:name="com.baidu.location.f"
                android:enabled="true"
                android:process=":remote"/>
            <!-- AK鉴权 -->
            <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="这是填写在百度申请的AK" />
            <activity
                android:name="com.baidu.location.demo.LocationActivity"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
                </application>
    
    </manifest>
    

    在这里插入图片描述

    创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,欢迎点赞,关注,收藏,下一篇接上(接收端源码)

    展开全文
  • AMapLocationListener 高德地图定位监听

    千次阅读 2020-06-22 15:59:17
    app内很多地方需要用到定位信息,我就自己封装了一个基于高德地图定位监听的类,以便于获取定位权限,和方便调用定位监听事件。我这边继承了LifecycleObserver,将定位事件和acticity的生命周期绑定在了一起,这样的...

    AMapLocationListener 高德地图定位监听

    app内很多地方需要用到定位信息,我就自己封装了一个基于高德地图定位监听的类,以便于获取定位权限,和方便调用定位监听事件。我这边继承了LifecycleObserver,将定位事件和acticity的生命周期绑定在了一起,这样的话即便一开始定位没开或者获取定位失败了,还能在后面继续获取定位信息。

    AMapLocationListener

    package cn.sunsapp.owner.util;
    
    import android.content.Context;
    
    import androidx.lifecycle.Lifecycle;
    import androidx.lifecycle.LifecycleObserver;
    import androidx.lifecycle.OnLifecycleEvent;
    
    import com.amap.api.location.AMapLocation;
    import com.amap.api.location.AMapLocationClient;
    import com.amap.api.location.AMapLocationClientOption;
    import com.amap.api.maps.model.LatLng;
    import com.basic.lattercore.app.Suns;
    import com.basic.lattercore.util.permission.PermissionSetting;
    import com.yanzhenjie.permission.Action;
    import com.yanzhenjie.permission.AndPermission;
    import com.yanzhenjie.permission.runtime.Permission;
    
    import java.util.List;
    
    public class AMapLocationListener implements LifecycleObserver {
    
    
        private Context mContext;
        public AMapLocationListener(Context context) {
            this.mContext = context;
        }
    
        private AMapLocationClient locationClient;
        //声明mLocationOption对象
        private AMapLocationClientOption locationOption = null;
    
        private LatLng myLatlng;
    
        private LocationListener listener;
    
        public void setListener(LocationListener listener) {
            this.listener = listener;
        }
    
        public LatLng getMyLatlng() {
            return myLatlng;
        }
    
        private void setMyLatlng(LatLng myLatlng) {
            this.myLatlng = myLatlng;
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        void createLocation(){
            initLocation();
            startLocation();
    
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        void destroyLocal(){
            destroyLocation();
        }
    
        private void initLocation() {
    
                //初始化client
                locationClient = new AMapLocationClient(Suns.getApplication());
                locationOption = getDefaultOption();
                //设置定位参数
                locationClient.setLocationOption(locationOption);
                // 设置定位监听
                locationClient.setLocationListener(locationListener);
        }
    
        /**
         * 默认的定位参数
         */
        private AMapLocationClientOption getDefaultOption() {
            AMapLocationClientOption mOption = new AMapLocationClientOption();
            mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
            mOption.setGpsFirst(true);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
            mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
            mOption.setInterval(5 * 1000);//可选,设置定位间隔。默认为2秒
            mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true
            mOption.setOnceLocation(false);//可选,设置是否单次定位。默认是false
            mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
            AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
            mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是false
            mOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差
            mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true
            //mOption.setGeoLanguage(AMapLocationClientOption.GeoLanguage.DEFAULT);//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言)
            return mOption;
        }
    
        /**
         * 定位监听
         */
        com.amap.api.location.AMapLocationListener locationListener = new com.amap.api.location.AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation location) {
                if (null != location) {
    
                    StringBuffer sb = new StringBuffer();
                    //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
                    if (location.getErrorCode() == 0) {
                        double lat = location.getLatitude();
                        double lon = location.getLongitude();
                        myLatlng = new LatLng(lat,lon);
                        setMyLatlng(myLatlng);
                        if (listener != null) {
                            listener.success(location);
                            // 如果需要一直获取定位监听权限的话,就把下面这一行注释掉
                            locationClient.stopLocation();
                        }
                    } else {
                        //定位失败
                        sb.append("定位失败" + "\n");
                        sb.append("错误码:" + location.getErrorCode() + "\n");
                        sb.append("错误信息:" + location.getErrorInfo() + "\n");
                        sb.append("错误描述:" + location.getLocationDetail() + "\n");
                        listener.error();
                    }
                }
            }
        };
    
        private void startLocation() {
            AndPermission.with(mContext)
                    .runtime()
                    .permission(Permission.ACCESS_COARSE_LOCATION)
                    .onGranted(new Action<List<String>>() {
                        @Override
                        public void onAction(List<String> data) {
                            // 启动定位
                            locationClient.startLocation();
                        }
                    }).onDenied(new Action<List<String>>() {
                @Override
                public void onAction(List<String> data) {
                		// 获取定位权限弹窗,如果需要每次打开都提示获取定位权限的话,就把下面的判断条件注视打开
    //                if (AndPermission.hasAlwaysDeniedPermission(mContext, data) ) {
                        new PermissionSetting(mContext).showSetting(data);
    //                }
                }
            }).start();
    
        }
    
        /**
         * 销毁定位
         *
         * @author hongming.wang
         * @since 2.8.0
         */
        private void destroyLocation() {
            if (null != locationClient) {
                /**
                 * 如果AMapLocationClient是在当前Activity实例化的,
                 * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
                 */
                //locationClient.disableBackgroundLocation(true);
                locationClient.stopLocation();
                locationClient.unRegisterLocationListener(locationListener);
                locationClient.onDestroy();
                locationClient = null;
                locationOption = null;
            }
        }
    
        public interface LocationListener{
            void success(AMapLocation mapLocation);
    
            void error();
        }
    
        /**
         * 回到自己的定位
         */
    //    public void moveTolocation(AMap aMap) {
    //        if (aMap != null && myLatlng != null) {
    //            //将地图移动到定位点
    //            aMap.moveCamera(CameraUpdateFactory.changeLatLng(myLatlng));
    //        }
    //    }
    
    }
    
    

    PermissionSetting

    package com.basic.lattercore.util.permission;
    
    import android.content.Context;
    import android.text.TextUtils;
    
    import com.basic.core.R;
    import com.lxj.xpopup.XPopup;
    import com.lxj.xpopup.interfaces.OnConfirmListener;
    import com.lxj.xpopup.interfaces.OnInputConfirmListener;
    import com.yanzhenjie.permission.AndPermission;
    import com.yanzhenjie.permission.runtime.Permission;
    
    import java.util.List;
    
    /**
     * 用来处理权限一直被拒绝,弹出弹窗让用户去设置界面开启此权限
     */
    public class PermissionSetting {
        private static final int REQ_CODE_PERMISSION = 1;
        private final Context mContext;
    
        public PermissionSetting(Context context) {
            this.mContext = context;
        }
    
        public void showSetting(final List<String> permissions) {
            List<String> permissionNames = Permission.transformText(mContext, permissions);
            String message = "我们需要以下权限,请在设置中为我们开启:"+ "\n"+ permissionNames;
    
            new XPopup.Builder(mContext).asConfirm("提示", message,
                    new OnConfirmListener() {
                        @Override
                        public void onConfirm() {
                            AndPermission.with(mContext)
                                    .runtime()
                                    .setting()
                                    .start(REQ_CODE_PERMISSION);
                        }
                    })
                    .bindLayout(R.layout.my_confim_popup)
                    .show();
    
    
        }
    
    }
    

    使用示例(在主页面HomeActivity调用AMapLocationListener)

    /**
         * 在onCreate()调用即可
         */
    private void initLocation() {
            //添加定位监听
            AMapLocationListener aMapLocationListener = new AMapLocationListener(mContext);
            aMapLocationListener.setListener(new AMapLocationListener.LocationListener() {
                @Override
                public void success(AMapLocation mapLocation) {
                    // maplocation存放了很多的定位数据,经纬度省市县详细地址都可以从这里拿
                    
                }
    
                @Override
                public void error() {
    
                }
            });
            // 将定位监听事件和acitvity生命周期绑定在一起
            getLifecycle().addObserver(aMapLocationListener);
        }
    

    小结

    不同的app都有不同的需求,在AMapLocationClientOption 的getDefaultOption()方法里面设置您所需要的参数。
    最后,有啥问题或者我写的有地方写错了希望您能在评论区留言,加个关注点个赞吧,求求您了!

    展开全文
  • Android手机定位案例代码

    千次阅读 2015-03-23 19:23:45
    * 手机定位程序代码 * * @author xuliugen * */ public class MainActivity extends Activity { // 用到位置服务 private LocationManager lm; private MyLocationListener listener...
  • Android 定位权限被用户拒绝了,如何监听到权限被用户拒绝? 需求是如果定位权限被用户拒绝了,在用到定位的地方提示用户去开启权限,请问我该如何监听这个权限是否被拒绝?...求各路大神指教如何监听定位权限被拒绝!
  • Android中如何监听手机GPS打开状态

    千次阅读 2016-01-26 20:50:15
    比如,手机的GPS没有打开,而我们注册了监听,那有什么用呢? 所以,我们应该实时监听手机的GPS打开状态,根据GPS状态来注册或取消注册事例~~ 具体实现很简单,就是设置一个ContentObserver,用于观察GPS...
  • 控制安卓手机拍照,查看定位,获取通信录引言准备工作1. kali、手机2.戴上眼睛注意别敲错命令,复制的时候注意看!开始了!!!FirstSecond 引言 ** 大家好,我是Zues,今天我来教会大家一个入侵安卓手机控制手机拍照...
  • 1.导入类库: #import ...2.判断APP用户手机是否开启了定位服务: 这里就要查看CLLocationManager的授权状态,此方法会返回当前授权状态: [CLLocationManager authorizationStatus] 授权状态为枚举值: ...
  • 手机定位(原生android定位

    千次阅读 2018-04-22 16:39:48
    手机定位分为卫星定位和网络定位两大类;卫星定位:它服务由几个全球卫星导航系统提供,主要包括美国的GPS,中国北斗等,它是根据多颗卫星与导航芯片的通信结果得到手机与卫星距离,然后计算手机当前所处的经度,...
  • flutter 手机定位

    千次阅读 2019-12-07 11:13:48
    Flutter 手机定位编写步骤:在程序中创建密钥存储路径用 Idea 生成密钥文件在高德管网 API 中申请定位 key值在Android 主面板中引入GPS权限、引入定位、添加依赖将申请的本程序的 key 添加在Android 主面板、及插件...
  • 本文详细介绍了在小米系列等机型上放开定位权限后的定位请求弹框示例,例如在应用软件中提示显示定位服务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • 手机监听到用户从浅睡进入深睡状态时,立即播放短促躁音,使退回浅睡,达到睡眠破坏的目的; 对于这种木马程序,本软件也能防御,使其不能录到用户睡眠鼾声。第三种可能性, 手机内基于声波定位或声波振荡等...
  • Android动态监听GPS状态

    千次阅读 2019-09-19 13:44:28
    因为上一篇博客的缘故,发现安卓9.0的定位跟GPS是否开启有很大关系,因此就想到安卓能不能监听GPS的状态,类似于广播这种注册接收等,经过搜索发现,安卓系统还是有预留这个监听,也许大家对这个需求可能不是太需要...
  • h5手机端或PC端利用高德地图获取当前定位位置 本文转载 ...
  • 一:移动端软键盘监听(弹出,收起) 参考: 链接一 链接二 1.监听resize ( Android)123456789var winHeight = $(window).height(); //获取当前页面高度$(window).resize(function () { var thisHeight = $...
  • /**--监听位置变化-- * 5 秒更新一次或最小位移变化超过10米更新一次 * * LocationManager.GPS_PROVIDER 可以替换成 location.getProvider() * 替换后更新的坐标就不一定是gps定位信息,而是GPS、NETWORK 、PASSIVE...
  • 十种智能手机定位跟踪方式解析

    千次阅读 2013-04-03 20:48:57
    智能手机具备的最重要的功能之一就是知道它们在哪里。对于台式电脑、笔记本电脑、个人导航设备或者平板电脑,你比较难以随身携带,而智能手机可以随手放入口袋,它能够将... 全球定位系统是由美国国防部开发的,最早在
  • 在Android进行手机设置时,会出现GPS关闭的情况,这时应该弹出一个窗口提示用户开启GPS,然后开启后重启定位监听。 提示窗口: private void openGPS() { new AlertDialog.Builder(MapActivity.this) .setIcon...
  • 手机端实时定位

    2020-08-11 15:23:07
    项目需要做一个管道巡检的模块,需要用到实时定位。实验了好几种办法,最后还是回归原生应用了。 项目的APP是用vue做的,但是定位那叫一个难受,必须用原生应用的辅助定位才能做到准确。最后还是放弃了,回归原生。...
  • 手机编程,调用GPS定位模块 GPS调用是Android系统中非常重要的一个功能,可以为手机app提供与位置相关的所有功能。 Android编程时,对于GPS模块有一个专门的管理类,称为:LocationManager,用来管理与GPS定位服务...
  • 方法二:还是绝对定位或固定定位,给输入框来个监听,@focus聚焦则隐藏按钮,@blur失焦则显示按钮。但是安卓手机,键盘收起时输入框不会立刻失焦,键盘完全收起后过几秒才失焦,有个时间差,这方法就不完美。 方法...
  • Android手机定位

    2021-10-17 21:10:28
    定位定位准备高德地图SHA1的查找申请Key值定位逻辑添加开发包、依赖、设置权限逻辑代码初始化定位配置参数并启动定位获取手机权限 定位准备 高德地图 这里也可以用百度地图。首先进入高德开放平台。注册并申请自己的...
  • 最全的LBS手机定位技术说明

    千次阅读 2019-07-24 13:41:13
    随着手机技术的发展定位方式也发生了很大的变化。获取手机位置有很多种方式。 第一种:CELL-ID定位原理 通过移动网络获取设备当前所在的Cell信息来获取设备当前位置。当设备位置更新设备会向当前服务小区报告当前...
  • 高德地图八:手机定位和GPS定位

    千次阅读 2019-02-25 23:26:20
    高德地图八:手机定位和GPS定位 高德地图八:手机定位和GPS定位 代码实现: layout/activity_main.xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,466
精华内容 9,386
关键字:

如何监听定位手机