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