我需要通过GPS程序获得我的当前位置。 我怎样才能做到呢?


当前回答

LocationManager是一个类,它提供内置方法来获取最后知道的位置

步骤1:如下所示创建LocationManager对象

导航(导航);

步骤2:添加标准

*Criteria is use for setting accuracy*

Criteria criteria = new Criteria();
int currentapiVersion = android.os.Build.VERSION.SDK_INT;

if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {

    criteria.setSpeedAccuracy(Criteria.ACCURACY_HIGH);
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(true);
    criteria.setBearingRequired(true);
    criteria.setSpeedRequired(true);

}

步骤3:获取可用的提供商

有两种类型的供应商GPS和网络

 String provider = locationManager.getBestProvider(criteria, true);

第四步:了解最后知道的地点

Location location = locationManager.getLastKnownLocation(provider);

第五步:获取经纬度

如果location对象为空,那么不要尝试调用下面的方法

getLatitude和getLongitude是返回双值的方法

其他回答

获得位置更新需要大量的代码在Android,你需要照顾

谷歌播放服务可用性检查, 更新谷歌播放服务,如果它是旧的或不可用 对话框创建GoogleApiClient和它的回调连接,断开等。 停止并释放用于位置更新的资源 处理位置权限场景 检查“位置”服务是否开启 获取最后已知位置也不是那么容易 如果在一定时间后没有得到位置,则退回到最后一个已知位置

为了简化所有这些步骤,我创建了android - easylocation(小型android库),它将照顾所有这些东西,你可以专注于业务逻辑。

所有你需要的是扩展EasyLocationActivity和这个

requestSingleLocationFix(easyLocationRequest);

or

requestLocationUpdates(easyLocationRequest);

签出示例应用程序和步骤需要在这里https://github.com/akhgupta/Android-EasyLocation

GoogleSamples有详细的例子使用最新的FusedLocationProviderApi。 不幸的是,被点赞最多的答案都过时了。

按照下面的例子使用FusedLocationProviderApi实现位置服务

https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates

https://github.com/googlesamples/android-play-location/blob/master/LocationUpdates/app/src/main/java/com/google/android/gms/location/sample/locationupdates/MainActivity.java

自2020年9月23日起,play-services-location版本17.1.0包含了FusedLocationProviderClient.getCurrentLocation()方法,这是获得当前位置的推荐和直接的方法:

返回设备上的单个当前位置固定。与返回缓存位置的getLastLocation()不同,此方法可能导致设备上的活动位置计算。如果能在合理的时间内(几十秒)确定设备位置,将返回一个新的位置,否则将返回null。

关于详细的例子,看看codingjeremy的回答和GitHub上的官方Android位置示例- Current location (Kotlin)。

通过-获取gps位置

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

LocationListener locationListener = new LocationListener() 
{

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                double latitude = location.getLatitude();
                double longitude = location.getLongitude();
                double speed = location.getSpeed(); //spedd in meter/minute
                speed = (speed*3600)/1000;      // speed in km/minute               Toast.makeText(GraphViews.this, "Current speed:" + location.getSpeed(),Toast.LENGTH_SHORT).show();
            }
        };

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

}

如果你正在为Android创建新的位置项目,你应该使用新的谷歌Play位置服务。它更准确,使用起来更简单。

几年来,我一直致力于一个开源的GPS跟踪器项目,GpsTracker。我最近更新了它,以处理来自Android、iOS、Windows Phone和Java ME手机的定期更新。它功能齐全,可以满足您的需要,并且拥有MIT许可证。

GpsTracker中的Android项目使用了新的谷歌播放服务,还有两个服务器堆栈(ASP。NET和PHP)来让你追踪这些手机。