1. 程式人生 > >Android Google地圖接入(二)

Android Google地圖接入(二)

前面完成了地圖的顯示,現在想要獲取位置資料,需要使用到另一個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;// 位置請求 @Override protected 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 LocationServices mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(connectedListener) .addOnConnectionFailedListener(connectionFailedListener) .addApi(LocationServices.API) .build(); } @Override protected void onStart() { mGoogleApiClient.connect();// 連線Google Play服務 super.onStart(); } @Override protected void onPause() { super.onPause(); stopLocationUpdates();// 停止位置更新 } @Override protected void onStop() { mGoogleApiClient.disconnect();// 斷開連線 super.onStop(); } protected OnMapReadyCallback onMapReadyCallback = new OnMapReadyCallback() { @Override public 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() { @Override public void onConnectionSuspended(int arg0) { Log.i(TAG, "onConnectionSuspended"); } @Override public 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() { @Override public void onConnectionFailed(@NonNull ConnectionResult arg0) { Log.e(TAG, "onConnectionFailed"); } }; // 位置監聽 private final LocationListener locationListener = new LocationListener() { @Override public 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地圖接入

前面完成了地圖的顯示,現在想要獲取位置資料,需要使用到另一個API:Google Play services Location API。 接收位置更新基本流程: 1. 連線LocationServices; 2. 定義位置更新回撥; 3. 請求位置

android的百度地圖開發 定位

頻率 update 殺死 一次 ddr animate 語義 pri des 參考:http://blog.csdn.net/mr_wzc/article/details/51590485 第一步,初始化LocationClient類 //獲取地圖控件引用

Android Firebase接入--Firebase 動態連結Dynamic Links

動態連結簡介生成一個根據不同的場景響應不同行為的連結。比如:你想要為app新增一個房間內邀請好友的功能,如果好友也安裝了此app,點選分享連結就進入此房間,如果好友沒有安裝此app,那就跳轉到Google Play下載頁面(或者你自定義的任何頁面),如果好友沒有安裝此app,

Android Design Support Library用NavigationView實現抽屜菜單界面

mpi tar bar board contex != print 滑動 頭部 NavigationView在MD設計中很重要,之前Google也提出了使用DrawerLayout來實現導航抽屜。這次,在Android Design Support Li

Android sensor 系統框架

port amp cap 錯誤 str 註釋 hardware war cas 連載上一篇http://www.cnblogs.com/hackfun/p/7327320.html (D) 如何加載訪問.so庫 在前一篇博客http://www.cnblogs.co

Android短信收發

light undle protect ati res class cast gets new 接收SMS類,代碼如下 //for receive SMS private SmsReceiver mSmsReceiver; @Override

Android常見問題總結

時長 加載 col gen try pla 下載 pro 屬性 1、布局文件LinearLayout線性布局添加內容報錯。解決方法:線性布局LinearLayout中包裹的元素多余1個需要添加android:orientation屬性。 2、android 的應用APP怎麽

Android項目實戰:安卓應用程序退出的三種方法

eat 延遲 用戶 pre html port length tst 二次 原文:Android項目實戰(二):安卓應用程序退出的三種方法現在的APP退出的時候都不是讓用戶點擊了“後退鍵”就退出。防止用戶點錯了後退鍵而造成的用戶體檢不好。 一年前搞

Android包管理機制PackageInstaller安裝APK

tac _id cas 賦值 complete get Owner 執行 context 前言 在本系列上一篇文章Android包管理機制(一)PackageInstaller的初始化中我們學習了PackageInstaller是如何初始化的,這一篇文章我們接著學習Pack

Android TV開發總結構建一個TV Metro界面仿泰捷視頻TV版

alt 軟件 XML 的區別 微信 Edito pretty web 效果 原文:Android TV開發總結(二)構建一個TV Metro界面(仿泰捷視頻TV版) 版權聲明:我已委托“維權騎士”(rightknights.com)為我的文章

Android開發 - 掌握ConstraintLayout介紹

介紹 釋出時間 ConstraintLayout是在2016的Google I/O大會上釋出的,經過這麼長時間的更新,現在已經非常穩定。 支援Android 2.3(API 9)+ 目前的Android設定幾乎沒有低於Android4.4(Api 19)的,所以ConstraintLayout可以支援

Android註冊程式編寫主函式部分

Android註冊程式編寫(二) (作者:Baron_wu 禁止轉載) 大家關注一下,順便點個讚唄 首先安裝外掛:butterknife 開啟file下的setting並選擇plugins(在browse): 在browserepository中搜索butterknif

一步一步學習Android TV/盒子開發

TV、機頂盒開發除錯不能像手機一樣通過USB線連線除錯,可通過ADB連線除錯 連線電視 adb connect 10.74.84.199 1 2 連線後就可以開始開發除錯了! 斷開連線 // 斷開某個裝置 adb disconnect 10.74.84

Android Jetpack 組建介紹——Lifecycler

參考Android Jetpack架構元件之 Lifecycle(原始碼篇) 原始碼分析 關於Lifecycle的使用考上一篇文章Android Jetpack框架之 Lifecycles(使用篇),從使用的方法中我們知道Lifecycle的實現主要依賴:LifecycleObserver、Lifecyc

Android hook神器frida

export 通過 func find UNC oid inter function dex 1.關於使用frida遇到的一些問題 如果出現以下錯誤: 可以通過以下方式關閉SELinux,在adb shell中執行: echo 0 > /sys/fs/s

Android多執行緒

  在上一篇中,我簡單說了用AsyncTask來完成簡單非同步任務,但AsyncTask是把所有的非同步任務放到一個佇列中依次在同一個執行緒中執行。這樣就帶來一個問題,它無法處理那些耗時長、需要並行的的任務。如何處理這個難題呢?一是自己開啟執行緒然後處理執行緒通訊問題,二是使用HandlerThre

Android藍芽使用

轉載自: https://blog.csdn.net/duo_shine/article/details/70259928 藍芽使用(一)http://blog.csdn.net/duo_shine/article/details/70257113  藍芽韌體升級:http://b

Android錄製小視訊

之前講了camera的相關問題,今天把mediaRecorder總結一下 1.視訊的videoSize設定         視訊的錄製尺寸設定考慮的方面比較多,說下我在這裡碰到的一些坑。初次以camera的預覽尺寸作為

android Audio 詳解

android Audio 詳解( 二 ) 2018年01月04日 15:57:45 韓半仙 閱讀數:302更多 個人分類: linux驅動 2  tinyalsa    tinyalsa是Google在Android 4.0之

Android控制元件集合

RatingBar 星級評分控制元件 1:星星評分樣式 xml檔案內容 <RatingBar android:id="@+id/rb_normal" android:layout_width="wrap_content" android:la