android典型程式碼系列(十六)------GPS定位
13GPS定位 :
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.TextUtils;
/** * 保證這個類只存在一個例項 */
public class GPSInfoProvider {
LocationManager manager;
private static GPSInfoProvider mGPSInfoProvider;
private static Context context;
private static MyLoactionListener listener;
//1.私有化構造方法
private GPSInfoProvider(){};
//2. 提供一個靜態的方法,可以返回他的一個例項(synchronized:保證這個方法裡面的邏輯必須全部執行)
public static synchronized GPSInfoProvider getInstance(Context context){
if(mGPSInfoProvider==null){
mGPSInfoProvider = new GPSInfoProvider();
GPSInfoProvider.context = context;
}
return mGPSInfoProvider;
}
// 3.獲取gps 資訊
public String getLocation(){
manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//manager.getAllProviders();//獲取當前手機支援的定位方式
String provider = getProvider(manager);
/* 註冊位置的監聽器
第一個引數:定位方式,GPS,AGPS,基站
第二個引數:每隔多長時間(ms)獲取一下當前手機的位置(推薦1分鐘)
第三個引數:位置每改變多少米獲取一下位置資訊
第四個引數:當位置發生改變的時候所對應的的回撥方法
*/
manager.requestLocationUpdates(provider,60000, 50, getListener());
SharedPreferences sp = context.getSharedPreferences
("config", Context.MODE_PRIVATE);
String location = sp.getString("location", "");
return location;
}
/** @param manager 位置管理服務
* @return 最好的位置提供者*/
private String getProvider(LocationManager manager){
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//經度,這裡表示精準定位
criteria.setAltitudeRequired(false);//是否對海拔資訊敏感
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//設定GPS定位對耗電效能要求
criteria.setSpeedRequired(true);//設定是否對速度的變化敏感
criteria.setCostAllowed(true);//true:允許產生一些開銷,與執行商通訊等
//第一個引數:一組查詢條件,耗電?經緯度?海拔等
//第二個引數:true:返回那些已經被開啟的裝置,false:返回全部可以的位置提供者
return manager.getBestProvider(criteria, true);
}
private synchronized MyLoactionListener getListener(){
if(listener==null){
listener = new MyLoactionListener();
}
return listener;
}
private class MyLoactionListener implements LocationListener{
/**當手機位置發生改變的時候 呼叫的方法 */
public void onLocationChanged(Location location) {
String latitude ="latitude "+ location.getLatitude(); //緯度
String longtitude = "longtitude "+ location.getLongitude(); //經度
SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("location", latitude+" - "+ longtitude);
editor.commit(); //最後一次獲取到的位置資訊 存放到sharedpreference裡面
}
/**某一個裝置的狀態發生改變的時候 呼叫 可用->不可用 不可用->可用*/
public void onStatusChanged(String provider, int status, Bundle extras) { }
/**某個裝置被開啟*/
public void onProviderEnabled(String provider) {}
/**某個裝置被禁用 */
public void onProviderDisabled(String provider) {}
}
// 4. 停止gps監聽(很重要)
public void stopGPSListener(){
manager.removeUpdates(getListener());
}
}
補充:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//設定為最大精度
criteria.setAltitudeRequired(false);//不要求海拔資訊
criteria.setBearingRequired(false);//不要求方位資訊
criteria.setCostAllowed(true);//是否允許付費
criteria.setPowerRequirement(Criteria.POWER_LOW);//對電量的要求
它其實是一個條件設定是選擇provider
的用的
String provider = locationManager.getBestProvider(criteria, true);
這個方法是根據你設定的條件找到的最優的provider
你要是想用network定位你就要改變這個設定條件 或者 直接用設定provider為network型別的了
補充說明:
LocationManager.GPS_PROVIDER
:GPS,精度比較高,但是慢而且消耗電力,而且可能因為天氣原因或者障礙物而無法獲取衛星資訊,另外裝置可能沒有GPS模組;
LocationManager.NETWORK_PROVIDER
:通過網路獲取定位資訊,精度低,耗電少,獲取資訊速度較快,不依賴GPS模組。
相關文章
- android典型程式碼系列(二十六)------App widget的使用AndroidAPP
- Android的GPS定位Android
- android典型程式碼系列(二十五)------popupwindow的使用Android
- android典型程式碼系列(三十)------DES加密演算法Android加密演算法
- GPS定位
- android開發之GPS定位詳解Android
- android典型程式碼系列(二十八)------通話記錄的操作Android
- android典型程式碼系列(十七)------C程式碼中加入LOG_引入標頭檔案AndroidC程式
- 劫持GPS定位&劫持WIFI定位WiFi
- 【Android】GPS定位基本原理淺析Android
- android典型程式碼系列(二十)------多執行緒下載、斷點續傳Android執行緒斷點
- android典型程式碼系列(二十二)------按鍵使上面的EditText抖動Android
- android典型程式碼系列(二十九)------簡訊資料庫操作相關Android資料庫
- android gps機制分析--定位資料HAL處理Android
- win10如何使用gps定位_win10怎麼使用gps定位Win10
- Java socket 獲取gps定位Java
- LBS基站定位和GPS衛星定位對比
- android典型程式碼系列(二十四)------獲取某個應用程式所佔用的記憶體Android記憶體
- html5中的GPS定位功能HTML
- GPS車輛定位系統功能概述
- 小米8雙頻GPS評測 雙頻GPS和單頻GPS定位的區別
- android典型程式碼系列(十九)------將一個陣列複製成為另外一個陣列的方法Android陣列
- android典型程式碼系列(二十一)------根據檔案字尾名獲得對應的MIME型別Android型別
- 輕鬆gps定位:AnyGo最新啟用版中文Go
- 開啟android的gpsAndroid
- GPS、基站、IP定位的區別及其應用方向
- GPS被曝重大安全漏洞:隨便定位
- 利用jstack定位典型效能問題例項JS
- NT域驗證功能VB典型程式碼
- android典型程式碼系列(十八)------把java中的jstring的型別轉化成一個c語言中的char字串AndroidJavaJS型別C語言字串
- android典型程式碼系列(二十七)------鎖屏開啟瀏覽器傳資料,解屏最小化瀏覽器Android瀏覽器
- 【30篇突擊 android】原始碼統計 十六Android原始碼
- android GPS 獲取城市資訊Android
- 日報 | 美軍研發無需GPS的定位系統
- 10個典型實用的PHP程式碼片段PHP
- android gps機制分析--之二Android
- 第十六週週三(夢斷程式碼)
- 【Android Studio】入門系列 4.1.Coding 定位目標Android