前面完成了地图的显示,现在想要获取位置数据,需要使用到另一个API:Google Play services Location API。
接收位置更新基本流程:
1. 连接LocationServices;
2. 定义位置更新回调;
3. 请求位置更新
Activity代码:

import android.location.Location;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.widget.TextView;import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.LatLng;public class MainActivity extends FragmentActivity {public final String TAG = "MainActivity";private TextView infoTextView;private GoogleMap mMap;private GoogleApiClient mGoogleApiClient;private Location mLastLocation;private LocationRequest mLocationRequest;// 位置请求@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);infoTextView = (TextView) findViewById(R.id.information);SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(onMapReadyCallback);// Builds single client object that connect to LocationServicesmGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(connectedListener).addOnConnectionFailedListener(connectionFailedListener).addApi(LocationServices.API).build();}@Overrideprotected void onStart() {mGoogleApiClient.connect();// 连接Google Play服务super.onStart();}@Overrideprotected void onPause() {super.onPause();stopLocationUpdates();// 停止位置更新}@Overrideprotected void onStop() {mGoogleApiClient.disconnect();// 断开连接super.onStop();}protected OnMapReadyCallback onMapReadyCallback = new OnMapReadyCallback() {@Overridepublic void onMapReady(GoogleMap googleMap) {mMap = googleMap;mapSetting();}};private void mapSetting() {mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);mMap.setMyLocationEnabled(true);UiSettings uiSettings = mMap.getUiSettings();uiSettings.setZoomControlsEnabled(true);mLocationRequest = new LocationRequest();mLocationRequest.setInterval(10000);mLocationRequest.setFastestInterval(5000);mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);}// 客户端连接回调private final ConnectionCallbacks connectedListener = new ConnectionCallbacks() {@Overridepublic void onConnectionSuspended(int arg0) {Log.i(TAG, "onConnectionSuspended");}@Overridepublic void onConnected(Bundle arg0) {// 请求最后已知的位置mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);LatLng mLastLatLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLastLatLng, 16));// 启动位置更新startLocationUpdates();}};private final OnConnectionFailedListener connectionFailedListener = new OnConnectionFailedListener() {@Overridepublic void onConnectionFailed(@NonNull ConnectionResult arg0) {Log.e(TAG, "onConnectionFailed");}};// 位置监听private final LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {// 精确度越小越准,单位:米if (location.getAccuracy() > 100) {return;}mLastLocation = location;updateUI();}};private void updateUI() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Accuracy :").append(mLastLocation.getAccuracy()).append("\n").append("Altitude :").append(mLastLocation.getAltitude()).append("\n").append("Bearing :").append(mLastLocation.getBearing()).append("\n").append("ElapsedRealtimeNanos :").append(mLastLocation.getElapsedRealtimeNanos()).append("\n").append("Latitude :").append(mLastLocation.getLatitude()).append("\n").append("Longitude :").append(mLastLocation.getLongitude()).append("\n").append("Provider :").append(mLastLocation.getProvider()).append("\n").append("Speed :").append(mLastLocation.getSpeed()).append("\n").append("Time :").append(mLastLocation.getTime()).append("\n");infoTextView.setText(stringBuilder.toString());}protected void startLocationUpdates() {LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationListener);}protected void stopLocationUpdates() {LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, locationListener);}
}

获取位置数据:

Android Google地图接入(二)相关推荐

  1. Android Google地图接入(一)

    最近项目中需要接入Google地图,遇到很多问题,现在记录下来,供以后参考. 1. 登录Google API Console,注册Android API密钥(需要翻墙 ~_~) 得到API KEY: ...

  2. Android百度地图(二)结合方向传感器我们自己定位哪里走

    Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步修改,有 ...

  3. Android Google登录接入

    一.接入准备 手机必须有Google套件 Google服务框架,Google Play商店,Google Play服务(使用su谷歌安装器下载安装) 手机必须可以翻墙 google开发者账号 二.官网 ...

  4. uber_像Uber这样的Android Google地图样式

    uber Have you ever noticed how Uber and other few popular location-based applications have a differe ...

  5. [android] 百度地图开发 (二).定位城市位置和城市POI搜索

    一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位 ...

  6. Android百度地图之位置定位和附近查找代码简单实现 (上)

    很长时间没有做Android相关知识了,闲暇之余再弄了弄最新的百度地图API,主要是进行百度地图附近餐馆查找功能来练练手,同时熟悉下最新的API教程.文章比较基础,也希望对你有所帮助~参考前文:   ...

  7. [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

           前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Intere ...

  8. Android Google Map开发指南(三)百度地图、谷歌地图自如切换

    如果你是刚开始接触谷歌地图的话,推荐你先看一下文章: Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题 Android Google Map ...

  9. Android的Google地图开发

    编写这个程序之前需要有一个Google 地图 扩展库在SDK中,一般来说,android 1.5中就已经有了.如果没有的话可以在这里下载: http://code.google.com/android ...

最新文章

  1. MongoDB数据库(二:高级操作)
  2. java android下载文件_Android 下载文件(jsp做的服务器上)下载下来和源文件大小不一...
  3. 关于 Error: No PostCSS Config found in 的错误
  4. Python HTMLCalendar类| 带实例的formatyear()方法
  5. 用Typescript如火如荼地进行angular.js
  6. Python sys模块参考手册
  7. 打开 VMware Workstation 14 Pro 中的虚拟机出现 “此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态” 解决方法
  8. 小波同态滤波 matlab,简单的同态滤波(matlab)
  9. OPNET常用编译器使用实例和相关问题
  10. 如何通过链脉智能名片提高品牌知名度
  11. Python 计算 AMR 文件的时长
  12. 2022MySQL数据库-基础篇
  13. flowable-ui(v6.7.2)简单的请假流程审批操作(二)
  14. 前端input操作,修改光标颜色,去除背景色
  15. Unix/Linux下的Curses库开发指南——第一章 Curses库开发简介
  16. vue本地的模糊匹配
  17. 登录注册页面的示例代码
  18. R语言h2o深度学习分类
  19. 深度deepin20打印失败“Can’t create temporary file”解决方法
  20. 类各种成员的访问权限 及 友员类和友员函数

热门文章

  1. 从普通人到月入几万的创作人,我是怎么做到的?
  2. GoshawkDB:一个分布式、支持事务与容错的对象存储
  3. UEFI应用与编程--SMM(一)
  4. 053试题 21 / 198 /200 / 289/355/363/650/700 - duplicate database
  5. 快速上手golang
  6. 是什么引起数据库响应超时?
  7. 时间管理(详细说明)
  8. 【Python | X先生】从00-90后的微信昵称,发现如下规律。。。
  9. 《计算机网络》第三章作业
  10. AI智能化测试——各大厂质量保障实践分享汇总(下)