Android:如何使用 GPS 提供程序获取离线当前位置?

Posted

技术标签:

【中文标题】Android:如何使用 GPS 提供程序获取离线当前位置?【英文标题】:Android: How to get offline current location using GPS provider? 【发布时间】:2018-03-20 08:01:36 【问题描述】:

我想构建在用户离线时提供当前位置的代码。我创建了一个代码,其中我使用 GPS 提供程序,但我仅在用户在线时提供当前位置。我想获取用户的当前和新位置 这是代码

 final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener=new LocationListener() 
        @Override
        public void onLocationChanged(Location location) 

            lat=location.getLatitude();
            String mm = "";
            longitude=location.getLongitude();
            locationManager.removeUpdates(this);
            Geocoder geocoder = new Geocoder(context, Locale.getDefault());
            try 
                List<Address> addresses = geocoder.getFromLocation(lat, longitude, 1);
                Address obj = addresses.get(0);
                mm = obj.getCountryName();
                mm=mm+" , "+obj.getSubAdminArea();
                mm=mm+" , "+obj.getSubLocality();
                mm=mm+" , "+obj.getFeatureName();



                Log.v("IGA", "Address" + mm);


             catch (IOException e) 
                e.printStackTrace();
            






        

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) 

        

        @Override
        public void onProviderEnabled(String s) 

        

        @Override
        public void onProviderDisabled(String s) 

        
    ;
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
       String[] permissions,
                                                int[] grantResults)

        return;
    
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

【问题讨论】:

此link 与您需要的不完全相同,但可能会有所帮助。 How do I get the current GPS location programmatically in android? 【参考方案1】:

请定义在线/离线e

我建议你使用: locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, locationListenerGPS, null);

您更新后的代码应该是:

final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener=new LocationListener() 
    @Override
    public void onLocationChanged(Location location) 

        lat=location.getLatitude();
        String mm = "";
        longitude=location.getLongitude();

        Geocoder geocoder = new Geocoder(context, Locale.getDefault());
        try 
            List<Address> addresses = geocoder.getFromLocation(lat, longitude, 1);
            Address obj = addresses.get(0);
            mm = obj.getCountryName();
            mm=mm+" , "+obj.getSubAdminArea();
            mm=mm+" , "+obj.getSubLocality();
            mm=mm+" , "+obj.getFeatureName();

            Log.v("IGA", "Address" + mm);

         catch (IOException e) 
            e.printStackTrace();
        

    

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) 

    

    @Override
    public void onProviderEnabled(String s) 

    

    @Override
    public void onProviderDisabled(String s) 

    
;
if (ActivityCompat.checkSelfPermission(context,
    Manifest.permission.ACCESS_FINE_LOCATION) != 
    PackageManager.PERMISSION_GRANTED 
    && 
    ActivityCompat.checkSelfPermission(context,
    Manifest.permission.ACCESS_COARSE_LOCATION) 
    != PackageManager.PERMISSION_GRANTED) 
    String[] permissions, int[] grantResults)

    return;

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, locationListenerGPS, null);

【讨论】:

我想在没有互联网的情况下使用 如果您只需要请求一次位置,请使用我提供的代码,它可以在没有互联网的情况下使用。您只需要互联网进行地理编码,检索地址而不是位置(纬度和经度)

以上是关于Android:如何使用 GPS 提供程序获取离线当前位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 GPS 的情况下获取 Android 设备的当前城市名称?

使用 gps 在离线模式下显示当前位置

Android实现gps定位的坐标转换成地址

如何在 Android 中使用 gps 获取当前位置(街道、城市等)

gps 使用网络提供商和 gps 提供商?

Android - 获得 GPS 信号需要很长时间。如何实现一个好的 GPS 提供商?