Android原生GPS和网络定位工具类
16lz
2021-01-26
在应用开发中我们常常需要网络获取位置的方法,这里做一个工具类的封装,使用的是Android原生定位,包含两种方式,一种是原生GPS一种是网络定位的封装实现:
工具类代码如下所示:
package com.vondear.tools.tools;import android.Manifest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.SharedPreferences;import android.content.pm.PackageManager;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.app.Activity;import android.support.v4.content.LocalBroadcastManager;import android.view.accessibility.AccessibilityManager;import android.widget.Toast;import com.ta.utdid2.android.utils.SharedPreferenceHelper;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/** * * Created by AndyYuan on time at 2019/6/20. */public class GetGPSUtil { static GetGPSUtil getGPSUtil; public static GetGPSUtil getInstance() { if (getGPSUtil == null) getGPSUtil = new GetGPSUtil(); return getGPSUtil; } /** * 获取经纬度 * * @param context * @return */ private String getLngAndLat(Context context) { double latitude = 0.0; double longitude = 0.0; LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { //从gps获取经纬度 if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return "没有GPS权限"; } Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } else {//当GPS信号弱没获取到位置的时候又从网络获取 Toast.makeText(context, "GPS信号弱获取不到", Toast.LENGTH_SHORT).show(); return getLngAndLatWithNetwork(context); } } else { //从网络获取经纬度 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);//通过查阅资料好像我们的Android手机要开启过GPS(第一次获取须GPS获取或者其他第三方应用开启使用过GPS)后然后getLastKnownLocation(LoactionManager.NETWORK_PROVIDER)这个方法才不会返回空。 Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } return longitude + "," + latitude; } //从网络获取经纬度 public String getLngAndLatWithNetwork(Context context) { double latitude = 0.0; double longitude = 0.0; LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return "没有网络Internet获取权限"; } locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener); Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } return longitude + "," + latitude; } LocationListener locationListener = new LocationListener() { // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // Provider被enable时触发此函数,比如GPS被打开 @Override public void onProviderEnabled(String provider) { } // Provider被disable时触发此函数,比如GPS被关闭 @Override public void onProviderDisabled(String provider) { } //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 @Override public void onLocationChanged(Location location) { } };}
更多相关文章
- android 模拟器上查看shareperference文件内容
- android 点击获取验证码显示倒计时并不可用
- Android(安卓)Studio 微信分享功能(包括可以分享到朋友圈,分享到朋
- android 状态栏、标题栏、屏幕高度
- Android获取内存的不同方法总结
- Android(安卓)获取全国城市列表类似于联系人排序(二)
- Android(安卓)开发有用代码积累
- android 物理键盘布局
- 如何通过Tesseract开源OCR引擎创建Android(安卓)OCR应用