首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Android系统中获得lat lng值的最佳方法是什么?

在Android系统中获得lat lng值的最佳方法是什么?
EN

Stack Overflow用户
提问于 2016-02-02 16:39:06
回答 2查看 65关注 0票数 0

在Android系统中,获得用户lat液化天然气位置最有效的方法是什么?

所谓高效,我指的是快速且不太侵入权限(也是在最近Android6.0的权限更改之后)。

问题的第二部分是,除了Google之外,还有什么其他方法可以获得用户位置呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-02 16:52:17

更快的方式,使用Google Api,而不是Android Api:

首先,让类扩展GoogleApiClient.ConnectionCallbacks和LocationListener接口,并声明一个GoogleApiClient变量。

代码语言:javascript
代码运行次数:0
运行
复制
private GoogleApiClient gApiClient;

其次,从onCreate或类似的地方调用此方法:

代码语言:javascript
代码运行次数:0
运行
复制
protected synchronized void buildGoogleApiClient() {
    gApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult connectionResult) {

                }
            })
            .addApi(LocationServices.API)
            .build();

    gApiClient.connect();

    createLocationRequest();
}

protected void createLocationRequest() {

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

最后,重写此方法:

代码语言:javascript
代码运行次数:0
运行
复制
@Override
public void onLocationChanged(Location location) {
    tempLatitude=location.getLatitude();
    tempLongitude=location.getLongitude();
}

编辑

我刚刚意识到我缺少了一个方法,这个方法在连接fApiClient之后自动调用:

代码语言:javascript
代码运行次数:0
运行
复制
@Override
public void onConnected(Bundle bundle) {
    Location lkn= LocationServices.FusedLocationApi.getLastLocation(
            gApiClient);

    if(lkn!=null){

        tempLatitud=lkn.getLatitude();
        tempLongitud=lkn.getLongitude();
    }

    LocationServices.FusedLocationApi.requestLocationUpdates(
            gApiClient, mLocationRequest, this);
}

而且,如果您使用的是映射,则需要扩展另外两个接口: OnMapReadyCallback和GoogleMap.OnMapClickListener,这是最后一个接口,以防您需要对用户点击映射做出反应。第一种方法只需实现方法onMapReady(GoogleMap map)。在这个方法中,您可以

代码语言:javascript
代码运行次数:0
运行
复制
this.map=map;

(this.map是指类中由您声明的GoogleMap变量)。

在那之后,你的地图就可以使用了。

您将获得onLocationChanged方法中设备位置的更新,供您使用。

回答你的第二个问题,你可以得到你的纬度和经度通过三角测量的蜂窝塔。看,here

票数 0
EN

Stack Overflow用户

发布于 2016-02-02 16:43:47

使用LocationManager。

代码语言:javascript
代码运行次数:0
运行
复制
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();

  private final LocationListener locationListener = new LocationListener() {
  public void onLocationChanged(Location location) {
    longitude = location.getLongitude();
    latitude = location.getLatitude();
}
}

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);

如果你想使用全球定位系统,你需要给你的应用程序ACCESS_FINE_LOCATION许可。

代码语言:javascript
代码运行次数:0
运行
复制
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35158969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档