使用google service定位服务

概述

使用google service的API实现定位功能,封装成一个小模块。需要安装google service相关的sdk包,手机需要装有google服务框架等。主要是国外产品使用,国内需要翻墙,这里做下记录。

导入:

    compile 'com.google.android.gms:play-services-location:9.4.0'

使用

初始化模块,启动定时上报位置信息

 public void initLocationModule() {locationModule = new GoogleLocationModule(mActivity);locationModule.LocationInit(context);locationModule.googleClientConnect();locationModule.setLocationChangedListener(this);locationModule.startLocationUpdates();}

退出时释放模块资源

 @Overridepublic void releaseLocationModule() {locationModule.stopLocationUpdates();locationModule.googleClientDisconnect();}

监听模块上报数据

 @Overridepublic void onLocationChanged(Location location) {T.showShort(context, "mCurrentLocation: " + location.getLatitude());}

实现

模块接口

public interface LocationModule {void LocationInit(Context context);void startLocationUpdates();void stopLocationUpdates();void googleClientConnect();void googleClientDisconnect();void setLocationChangedListener(LocationChangedListener locationChangedListener);
}

模块实现

public class GoogleLocationModule implementsLocationModule,GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener,ResultCallback<LocationSettingsResult> {private MyLog myLog = new MyLog("[GoogleLocationModule] ");private Context context;private Activity mActivity;protected static final int REQUEST_CHECK_SETTINGS = 0x1;public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 5000;public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = UPDATE_INTERVAL_IN_MILLISECONDS / 2;public static GoogleApiClient mGoogleApiClient;protected LocationRequest mLocationRequest;public static LocationSettingsRequest mLocationSettingsRequest;protected Location mCurrentLocation;protected String mLastUpdateTime;protected Boolean mRequestingLocationUpdates = false;protected Boolean mStartLocationUpdates = false;private LocationChangedListener locationChangedListener;public GoogleLocationModule(Activity activity) {this.mActivity = activity;}@Overridepublic void LocationInit(Context context) {this.context = context;buildGoogleApiClient();createLocationRequest();buildLocationSettingsRequest();checkLocationSettings();  //检查并请求打开位置权限}@Overridepublic void startLocationUpdates() {if (!mGoogleApiClient.isConnected()){//未连接,设置标志位,连接时启动mRequestingLocationUpdates = true;}else{                              //已连接,判断是否已启动if (mStartLocationUpdates)return;if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,this);mStartLocationUpdates = true;}}@Overridepublic void stopLocationUpdates() {LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,this);mRequestingLocationUpdates = false;mStartLocationUpdates = false;}@Overridepublic void googleClientConnect() {if (!mGoogleApiClient.isConnected())mGoogleApiClient.connect();}@Overridepublic void googleClientDisconnect() {mGoogleApiClient.disconnect();}@Overridepublic void setLocationChangedListener(LocationChangedListener locationChangedListener) {this.locationChangedListener = locationChangedListener;}protected void checkLocationSettings() {PendingResult<LocationSettingsResult> result =LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,mLocationSettingsRequest);result.setResultCallback(this);}protected synchronized void buildGoogleApiClient() {myLog.d("Building GoogleApiClient");mGoogleApiClient = new GoogleApiClient.Builder(context).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build();}protected void createLocationRequest() {mLocationRequest = new LocationRequest();mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);}protected void buildLocationSettingsRequest() {LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();builder.addLocationRequest(mLocationRequest);mLocationSettingsRequest = builder.build();}@Overridepublic void onLocationChanged(Location location) {mCurrentLocation = location;mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());locationChangedListener.onLocationChanged(location);}@Overridepublic void onConnected(Bundle bundle) {myLog.d("GoogleApiClient onConnected");if (mRequestingLocationUpdates)startLocationUpdates();if (mCurrentLocation == null) {if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());if (mCurrentLocation != null) {T.showShort(context, "getLastLocation: " + mCurrentLocation.getLatitude());myLog.d("mCurrentLocation: " + mCurrentLocation.getAltitude());} else {myLog.d("mCurrentLocation null");}}}@Overridepublic void onConnectionSuspended(int i) {myLog.d("GoogleApiClient onConnectionSuspended");}@Overridepublic void onConnectionFailed(ConnectionResult connectionResult) {myLog.e("GoogleApiClient onConnectionFailed: " + connectionResult.getErrorMessage());}//位置权限请求返回结果@Overridepublic void onResult(LocationSettingsResult locationSettingsResult) {final Status status = locationSettingsResult.getStatus();switch (status.getStatusCode()) {case LocationSettingsStatusCodes.SUCCESS:myLog.d("All location settings are satisfied.");break;case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:myLog.d("Location settings are not satisfied. Show the user a dialog to" +"upgrade location settings ");try {status.startResolutionForResult(mActivity, REQUEST_CHECK_SETTINGS);} catch (IntentSender.SendIntentException e) {myLog.w("PendingIntent unable to execute request.");}break;case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:T.showShort(context, context.getString(R.string.map_open_gps_remind));myLog.e("Location settings are inadequate, and cannot be fixed here. Dialog not created.");break;}}
}

使用google service定位服务相关推荐

  1. Android使用Google定位服务定位并将经纬度转换为详细地址信息(国省市县街道)

    本文是作者在学习使用Google定位服务定位时的学习笔记,采用的是Kotlin语言编写. 1.位置权限以及定位服务 1.1 位置权限 1.2 动态权限申请 1.3 位置服务 1.4 APP权限与定位服 ...

  2. CLocation-国行安卓手机使用Google定位服务解决方案

    国行安卓手机Google定位服务解决方案 前言 转载请注明出处:http://blog.csdn.net/u010067411/article/details/79090500 Demo和源码请移步点 ...

  3. 深度剖析Service Mesh服务网格新生代Istio

    作者简介:敖小剑,十五年软件开发经验,微服务专家,专注于基础架构,Cloud Native拥护者,敏捷实践者.曾在亚信.爱立信.唯品会和ppmoney任职, 现任数人云资深架构师,本文由数人云独家授权 ...

  4. 万字长文|深度剖析Service Mesh服务网格新生代Istio

    Service Mesh新秀,初出茅庐便声势浩荡,前有Google,IBM和Lyft倾情奉献,后有业界大佬俯首膜拜,这就是今天将要介绍的主角,扛起Service Mesh大旗,掀起新一轮微服务开发浪潮 ...

  5. Android 定位服务(Location-Based Services)

    Android定位服务融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务.近些年来,基于位置的服务发展更为迅速,涉及商务.医疗.工作和生活的各个方面,为用户提供定位.追踪和敏 ...

  6. [CTO札记]惊讶于警察尚未用LBS(手机定位服务)来追踪疑犯

    昨天(周六)看到2个警察抓捕疑犯的真实故事: 1)江苏吴江一女被绑架,受逼开车前往苏州途中机智地用手机拨打110报警.后警察派出大量警力封堵多个路口排查.再启用多个视频监测探头发现受疑车辆,才捕获疑犯 ...

  7. Framework中网络定位服务简介

    前人已经将LocationManangerService的框架介绍的很不错了,可以参见下面的帖子 http://www.ibm.com/developerworks/cn/opensource/os- ...

  8. 基于android的考勤定位算法,基于移动定位服务的考勤管理系统

    [导读] 考勤管理是企事业单位经营和管理工作的重要环节和保障,主要包括两种方式,一种是手工方式,该方式工作繁杂,很难保证数据的准确与实时,增加了管理成本;另一种是利用专用考勤设备的电脑记录考勤方式,包 ...

  9. iOS项目开发— CoreLocation的定位服务和地理编码与发编码实现

      一.CoreLocation简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 2.在上述应用中,都用 ...

  10. Service Mesh(服务网格)

    Service Mesh作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势. 那么到底什么是Service Mesh? 一言以蔽之:Service Mesh是微服务时代 ...

最新文章

  1. mysql dml_详解MySQL---DDL语句、DML语句与DCL语句
  2. 如何保证Linux服务器的安全
  3. drive数据集_英伟达的最强人脸GAN开源了,它吃的高清数据集也开源了
  4. 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
  5. 三星手机 java_如何在三星手机上安装Java ME应用程序?
  6. acm省赛选拔组队赛经验谈
  7. 互联网架构“高并发”
  8. Django常用代码基本语句
  9. 【IMX6ULL笔记】--内核底层驱动初步探究
  10. php中lpush(),lPush 命令/方法/函数
  11. excel工作表合并
  12. Matlab求特征值和特征向量 + find函数的基本简单用法
  13. SHELL第一天课堂练习
  14. 微信扫码下载APK遮罩提示示例
  15. 数据分析师之路-数据埋点
  16. java 获取服务器上文件,java获取远程服务器上的文件
  17. android混淆那些坑
  18. jar包反编译工具(java-decompiler)
  19. R语言辅导高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
  20. 二次开发QTYX量化系统—“飞龙在天”选股报告(20230201)

热门文章

  1. MS2108 USB 数字视频采集芯片 支持8bit/16bit BT601/BT709/BT656/ BT1120转USB
  2. oracle密码已过期问题解决
  3. android 加密dex,App加固(dex加密)
  4. 软件评测师考试通过啦
  5. 全流程基于最新导则下的生态环境影响评价技术方法及图件制作
  6. qmc0文件怎么转换mp3_怎么用手机把手机里的视频转换成mp3音乐?(手机,不是电脑)...
  7. Swing-图表(扇形图的绘制)
  8. leach算法的实现过程_LEACH分簇算法实现和能量控制算法实现
  9. 压力换算公斤单位换算_压力与重量换算(公斤换算压力)
  10. 软件系统的沙盘测试是什么东西,沙盘(一款安全软件)_百度百科