前言:项目中用到了获取当前的经纬度,提供一个封装好的方法,直接调用即可。
工具类Utils:
public class LocationUtils { private static final String TAG = "LocationUtils"; private UpdateLocationListener updateLocationListener; private LocationManager manager; // 经度=120.107754, 纬度=30.287623 /** * 这是普通的网络定位以及gps定位,我这里优先考虑网络定位,因为网络定位局限性比较小 * 并且速度快,第三个参数代表是否是内网,因为使用内网的sim卡是无法进行网络定位的 */ public void normalLocation(Activity activity, UpdateLocationListener updateLocationListener, boolean insideSim) { LocationUtils.this.updateLocationListener = updateLocationListener; manager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); if (insideSim) { if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } //如果在GPS是开启的情况下并且选择是仅使用GPS定位服务,还是定位一直失败的话,请重启手机 // ToastUtils.showToast(activity,"如果是在室内请走到窗户旁边,这样方便GPS定位"); manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, locationListener); } else { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage("您的GPS没有打开,请打开GPS并且选择仅适用GPS选项");
builder.setPositiveButton("去打开", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { openGPS(activity); }
});
builder.setNegativeButton("忽略", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ToastUtils.showToast(activity,"已忽略"); } });AlertDialog dialog = builder.show() ; dialog.setCancelable( false) ; } } else { if ( manager.isProviderEnabled(LocationManager. NETWORK_PROVIDER)) { //优先考虑网络定位 // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新 // 1秒更新一次,或最小位移变化超过1米更新一次; // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置 if (ActivityCompat. checkSelfPermission(activity , Manifest.permission. ACCESS_FINE_LOCATION) != PackageManager. PERMISSION_GRANTED && ActivityCompat. checkSelfPermission(activity , Manifest.permission. ACCESS_COARSE_LOCATION) != PackageManager. PERMISSION_GRANTED) { return; } manager.requestLocationUpdates(LocationManager. NETWORK_PROVIDER , 1000 , 1 , locationListener) ; } else if ( manager.isProviderEnabled(LocationManager. GPS_PROVIDER)) { manager.requestLocationUpdates(LocationManager. GPS_PROVIDER , 1000 , 1 , locationListener) ; } else { ToastUtils. showToast(activity , "请打开GPS或网络") ; } } } // 位置监听 private LocationListener locationListener = new LocationListener() { /** * 位置信息变化时触发 */ public void onLocationChanged(Location location) { if (location != null && updateLocationListener != null) { updateLocationListener.update(location) ; // ToastUtils.showToast(BaseApplication.getContext(),"获取到了定位信息"); } } /** * GPS状态变化时触发 */ public void onStatusChanged(String provider , int status , Bundle extras) { } /** * GPS开启时触发 */ public void onProviderEnabled(String provider) { } /** * GPS禁用时触发 */ public void onProviderDisabled(String provider) { } } ; public interface UpdateLocationListener { void update(Location location) ; } public void reset() { updateLocationListener = null; if ( manager != null && locationListener != null) manager.removeUpdates( locationListener) ; } public static final void openGPS(Activity context) { //跳转到开启GPS界面 Intent locationIntent = new Intent(Settings. ACTION_LOCATION_SOURCE_SETTINGS) ; context.startActivityForResult(locationIntent , 50) ; } public void requestResult( int resultCode , final Activity activity) { if (resultCode == 50) { if ( manager.isProviderEnabled(LocationManager. GPS_PROVIDER)) { ToastUtils. showToast(activity , "如果是在室内请走到窗户旁边,这样方便GPS定位") ; if (ActivityCompat. checkSelfPermission(activity , Manifest.permission. ACCESS_FINE_LOCATION) != PackageManager. PERMISSION_GRANTED && ActivityCompat. checkSelfPermission(activity , Manifest.permission. ACCESS_COARSE_LOCATION) != PackageManager. PERMISSION_GRANTED) { return; } manager.requestLocationUpdates(LocationManager. GPS_PROVIDER , 0 , 1 , locationListener) ; } else { ToastUtils. showToast(activity , "还是没有打开GPS,无法使用拍照和录音功能") ; } } else { Log. i( TAG , "code != 50") ; } }}
然后直接写个initPermission方法调用即可。
private void initPermission2() { LocationUtils locationUtils = new LocationUtils(); if (EasyPermissions.hasPermissions(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)) { locationUtils.normalLocation(getActivity(), location -> this.location = location, true); } else { ToastUtils.showToast(getActivity(), "没有定位权限"); }}