【问题标题】:LocationServices.FusedLocationApi.requestLocationUpdates is never getting calledLocationServices.FusedLocationApi.requestLocationUpdates 永远不会被调用
【发布时间】:2017-05-25 05:34:42
【问题描述】:

我使用 LocationServices 方法代替 LocationManager 来获取当前 gps 位置和位置更新。

这是代码:

public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();//PRIORITY_BALANCED_POWER_ACCURACY
    mLocationRequest.setInterval(1000*30*1);
    mLocationRequest.setFastestInterval(1000*30*1);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this);
    }
}
public void onLocationChanged(Location location) { mLastLocation = location;
        if (mCurrLocationMarker != null)
        {
            mCurrLocationMarker.remove();
        }
    //Place current location marker
     latLng = new LatLng(location.getLatitude(), location.getLongitude());
     lat= location.getLatitude();
     log=location.getLongitude();
     trim_check_location_change(lat,log);
     MarkerOptions markerOptions = new MarkerOptions();
     markerOptions.position(latLng);
     markerOptions.title(""+s);
     markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
     mCurrLocationMarker = mMap.addMarker(markerOptions);
     //move map camera
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
     CurrentLocation = latLng;

}

当我从一个地方移动到另一个地方时,蓝色标记会相应移动。 但是 onlocationchanged 方法永远不会被调用。

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    我在这里开发了融合位置 api 演示应用程序和实用程序包。

    General Utilities

    如果对您有用,请尝试。要使用融合位置 api 获取位置,您只需编写以下 sn-p...

    new LocationHandler(this)
        .setLocationListener(new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            // Get the best known location
        }
    }).start();
    

    如果您想自定义它,只需在此处查找文档...

    https://github.com/abhishek-tm/general-utilities-android/wiki/Location-Handler

    更新

    我已经根据你的需要写了一个示例代码,试试这个...

    import android.content.Intent;
    import android.location.Location;
    import android.os.Bundle;
    import android.support.v4.app.FragmentManager;
    import android.support.v7.app.AppCompatActivity;
    
    import com.google.android.gms.location.LocationListener;
    import com.google.android.gms.location.LocationRequest;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.OnMapReadyCallback;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.Marker;
    
    import in.teramatrix.utilities.service.LocationHandler;
    import in.teramatrix.utilities.util.MapUtils;
    
    /**
     * Lets see how to use utilities module by implementing location listener.
     *
     * @author Khan
     */
    
    public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, LocationListener {
    
        private GoogleMap map;
        private Marker marker;
        private LocationHandler locationHandler;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Obtaining an instance of map
            FragmentManager manager = getSupportFragmentManager();
            SupportMapFragment mapFragment = (SupportMapFragment) manager.findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
    
            this.locationHandler = new LocationHandler(this)
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                    .setInterval(5000)
                    .setFastestInterval(10000)
                    .setLocationListener(this);
        }
    
        @Override
        public void onMapReady(GoogleMap map) {
            this.map = map;
            this.locationHandler.start();
        }
    
        @Override
        public void onLocationChanged(Location location) {
            LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
            if (marker == null) {
                marker = MapUtils.addMarker(map, latLng, R.drawable.ic_current_location);
                map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14), 500, null);
            } else {
                marker.setPosition(latLng);
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (locationHandler != null) {
                locationHandler.stop();
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == LocationHandler.REQUEST_LOCATION) {
                locationHandler.start();
            }
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 我检查了你的 github 代码。我将距离更改为 1 米,并移动了几米。我使用敬酒消息来指示位置更改。但 onLocatioChanged 仍然无法正常工作。
    • @cgeek GPS 无法识别此距离,该距离仅几米。出去看看。它应至少为 10-20 米。
    • 包含你的 github 代码。完美运行.. 谢谢。
    猜你喜欢
    • 2012-10-27
    • 2013-10-12
    • 2012-03-27
    • 2013-08-29
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2015-10-15
    相关资源
    最近更新 更多