日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android gps定位工具类,工具类之LocationUtils(定位工具类)

發布時間:2025/3/19 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android gps定位工具类,工具类之LocationUtils(定位工具类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無須引入第三方定位,單純依賴v4包,如果只是需要簡單的定位,那么這份工具類可以很好地幫助到你,老司機不多說,辛酸的話語都留在了代碼里了,上效果演示

LocationDemo

Demo牛逼地顯示是當時查內存泄漏查吐血的功勞,具體坑可以查看相關Demo代碼,下面開始開車,嘟嘟嘟嘟~

站點

isGpsEnabled : 判斷Gps是否可用

isLocationEnabled : 判斷定位是否可用

openGpsSettings : 打開Gps設置界面

register : 注冊

unregister : 注銷

getAddress : 根據經緯度獲取地理位置

getCountryName : 根據經緯度獲取所在國家

getLocality : 根據經緯度獲取所在地

getStreet : 根據經緯度獲取所在街道

具體路線

import android.content.Context;

import android.content.Intent;

import android.location.Address;

import android.location.Criteria;

import android.location.Geocoder;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.location.LocationProvider;

import android.os.Bundle;

import android.provider.Settings;

import java.io.IOException;

import java.util.List;

import java.util.Locale;

/**

*

* author: Blankj

* blog : http://blankj.com

* time : 16/11/13

* desc : 定位相關工具類

*

*/

public class LocationUtils {

private static OnLocationChangeListener mListener;

private static MyLocationListener myLocationListener;

private static LocationManager mLocationManager;

private LocationUtils() {

throw new UnsupportedOperationException("u can't instantiate me...");

}

/**

* 判斷Gps是否可用

*

* @return {@code true}: 是
{@code false}: 否

*/

public static boolean isGpsEnabled(Context context) {

LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

}

/**

* 判斷定位是否可用

*

* @return {@code true}: 是
{@code false}: 否

*/

public static boolean isLocationEnabled(Context context) {

LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

return lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER) || lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

}

/**

* 打開Gps設置界面

*/

public static void openGpsSettings(Context context) {

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);

}

/**

* 注冊

*

使用完記得調用{@link #unregister()}

*

需添加權限 {@code }

*

需添加權限 {@code }

*

需添加權限 {@code }

*

如果{@code minDistance}為0,則通過{@code minTime}來定時更新;

*

{@code minDistance}不為0,則以{@code minDistance}為準;

*

兩者都為0,則隨時刷新。

*

* @param minTime 位置信息更新周期(單位:毫秒)

* @param minDistance 位置變化最小距離:當位置距離變化超過此值時,將更新位置信息(單位:米)

* @param listener 位置刷新的回調接口

* @return {@code true}: 初始化成功
{@code false}: 初始化失敗

*/

public static boolean register(Context context, long minTime, long minDistance, OnLocationChangeListener listener) {

if (listener == null) return false;

mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

mListener = listener;

if (!isLocationEnabled(context)) {

ToastUtils.showShortToastSafe(context, "無法定位,請打開定位服務");

return false;

}

String provider = mLocationManager.getBestProvider(getCriteria(), true);

Location location = mLocationManager.getLastKnownLocation(provider);

if (location != null) listener.getLastKnownLocation(location);

if (myLocationListener == null) myLocationListener = new MyLocationListener();

mLocationManager.requestLocationUpdates(provider, minTime, minDistance, myLocationListener);

return true;

}

/**

* 注銷

*/

public static void unregister() {

if (mLocationManager != null) {

if (myLocationListener != null) {

mLocationManager.removeUpdates(myLocationListener);

myLocationListener = null;

}

mLocationManager = null;

}

}

/**

* 設置定位參數

*

* @return {@link Criteria}

*/

private static Criteria getCriteria() {

Criteria criteria = new Criteria();

//設置定位精確度 Criteria.ACCURACY_COARSE比較粗略,Criteria.ACCURACY_FINE則比較精細

criteria.setAccuracy(Criteria.ACCURACY_FINE);

//設置是否要求速度

criteria.setSpeedRequired(false);

// 設置是否允許運營商收費

criteria.setCostAllowed(false);

//設置是否需要方位信息

criteria.setBearingRequired(false);

//設置是否需要海拔信息

criteria.setAltitudeRequired(false);

// 設置對電源的需求

criteria.setPowerRequirement(Criteria.POWER_LOW);

return criteria;

}

/**

* 根據經緯度獲取地理位置

*

* @param context 上下文

* @param latitude 緯度

* @param longitude 經度

* @return {@link Address}

*/

public static Address getAddress(Context context, double latitude, double longitude) {

Geocoder geocoder = new Geocoder(context, Locale.getDefault());

try {

List

addresses = geocoder.getFromLocation(latitude, longitude, 1);

if (addresses.size() > 0) return addresses.get(0);

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

* 根據經緯度獲取所在國家

*

* @param context 上下文

* @param latitude 緯度

* @param longitude 經度

* @return 所在國家

*/

public static String getCountryName(Context context, double latitude, double longitude) {

Address address = getAddress(context, latitude, longitude);

return address == null ? "unknown" : address.getCountryName();

}

/**

* 根據經緯度獲取所在地

*

* @param context 上下文

* @param latitude 緯度

* @param longitude 經度

* @return 所在地

*/

public static String getLocality(Context context, double latitude, double longitude) {

Address address = getAddress(context, latitude, longitude);

return address == null ? "unknown" : address.getLocality();

}

/**

* 根據經緯度獲取所在街道

*

* @param context 上下文

* @param latitude 緯度

* @param longitude 經度

* @return 所在街道

*/

public static String getStreet(Context context, double latitude, double longitude) {

Address address = getAddress(context, latitude, longitude);

return address == null ? "unknown" : address.getAddressLine(0);

}

private static class MyLocationListener

implements LocationListener {

/**

* 當坐標改變時觸發此函數,如果Provider傳進相同的坐標,它就不會被觸發

*

* @param location 坐標

*/

@Override

public void onLocationChanged(Location location) {

if (mListener != null) {

mListener.onLocationChanged(location);

}

}

/**

* provider的在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數

*

* @param provider 提供者

* @param status 狀態

* @param extras provider可選包

*/

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

if (mListener != null) {

mListener.onStatusChanged(provider, status, extras);

}

switch (status) {

case LocationProvider.AVAILABLE:

LogUtils.d("onStatusChanged", "當前GPS狀態為可見狀態");

break;

case LocationProvider.OUT_OF_SERVICE:

LogUtils.d("onStatusChanged", "當前GPS狀態為服務區外狀態");

break;

case LocationProvider.TEMPORARILY_UNAVAILABLE:

LogUtils.d("onStatusChanged", "當前GPS狀態為暫停服務狀態");

break;

}

}

/**

* provider被enable時觸發此函數,比如GPS被打開

*/

@Override

public void onProviderEnabled(String provider) {

}

/**

* provider被disable時觸發此函數,比如GPS被關閉

*/

@Override

public void onProviderDisabled(String provider) {

}

}

public interface OnLocationChangeListener {

/**

* 獲取最后一次保留的坐標

*

* @param location 坐標

*/

void getLastKnownLocation(Location location);

/**

* 當坐標改變時觸發此函數,如果Provider傳進相同的坐標,它就不會被觸發

*

* @param location 坐標

*/

void onLocationChanged(Location location);

/**

* provider的在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數

*

* @param provider 提供者

* @param status 狀態

* @param extras provider可選包

*/

void onStatusChanged(String provider, int status, Bundle extras);//位置狀態發生改變

}

}

終點站

好了,終點站到了,如果對本次旅途滿意的話,請給五星好評哦,畢竟老司機犧牲了很多時間才換來這么一份工具類,如果該工具類依賴其他工具類,都可以在我的

總結

以上是生活随笔為你收集整理的android gps定位工具类,工具类之LocationUtils(定位工具类)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。