android:改进查找当前位置

时间:2016-01-23 09:12:09

标签: android google-maps android-fusedlocation

我想在android上找到当前的用户位置。

我使用这些代码:

<li ng-model = "question" ng-repeat="item in questions">
           {{item.info.ct}}
</li>

适用于某些网络(数据移动)。但不适用于所有位置。 (也适用于GPS)

我可以做更多的事情来更好地处理网络吗?

3 个答案:

答案 0 :(得分:1)

Context ctx = this;
        gpsLocationListener = new OLL(ctx);
        networkLocationListener = new OLL(ctx);
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Location temploc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (useGPS) {
          if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                     5000, 1, gpsLocationListener);
               }
        }
        if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
         lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            5000, 1, networkLocationListener);
       }

public class OLL implements LocationListener {
Context ctx;
private final static String TAG = "TAG"; 
    public OVoidLL(Context ctx) {

        this.ctx = ctx;
    }
@Override
    public void onLocationChanged(Location location) {
Log.d(TAG, location.toString);

    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}

答案 1 :(得分:1)

让您的活动实现LocationListener接口,然后利用FusedLocationApi来处理所有可用的提供商(例如GPS,网络)。

在onConnected方法中,您需要按以下步骤操作:

@Override
public void onConnected(Bundle connectionHint) {
    LocationRequest request = new LocationRequest();
    request.setInterval(10000);
    request.setFastestInterval(5000);
    request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    // using fused location api, taking care of all
    // available providers (e.g. GPS, NETWORK)
    // here do not forget to check for available LOCATION
    // permission before asking for updates
    LocationServices.FusedLocationApi.requestLocationUpdates(
        mGoogleApiClient, request, this);
}

由于您的Activity实现了LocationListener接口,因此您将收到onLocationChanged方法的更新。

@Override
public void onLocationChanged(Location location) {
    // this method is defined by LocationListener interface
    // here you will receive location updates based
    // on fused location api        
}

有关如何改进减少电池消耗的代码的详细信息,请参阅here

我发现您在自己的活动中使用GoogleMap。也可以使用方法setOnMyLocationChangeListener直接从GoogleMap对象获取当前位置。不幸的是,此方法现已弃用,因此建议使用FusedLocationProviderApi。

答案 2 :(得分:1)

请参阅此link如何在Android应用中获取和使用位置数据