onLocationChanged()从未调用过

abh*_*eta 21 gps android locationmanager

我正在编写一个带来当前位置的代码,但它没有给我这个位置,因为它从不调用onLocationChanged().是否有任何方法可以找到该位置.

对于这种情况,mobileLocation将为0,因此执行将转到else块.

我的代码是

public class FindLocation {
private LocationManager locManager;
private LocationListener locListener;
private Location mobileLocation;
private String provider;

public FindLocation(Context ctx){
    locManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
    locListener = new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(Location location) {
            System.out.println("mobile location is in listener="+location);
            mobileLocation = location;
        }
    };
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locListener);              
    if (mobileLocation != null) {
        locManager.removeUpdates(locListener); 
        String londitude = "Londitude: " + mobileLocation.getLongitude();
        String latitude = "Latitude: " + mobileLocation.getLatitude();
        String altitiude = "Altitiude: " + mobileLocation.getAltitude();
        String accuracy = "Accuracy: " + mobileLocation.getAccuracy();
        String time = "Time: " + mobileLocation.getTime();
        Toast.makeText(ctx, "Latitude is = "+latitude +"Longitude is ="+londitude, Toast.LENGTH_LONG).show();
    } else {
        System.out.println("in find location 4");
        Toast.makeText(ctx, "Sorry location is not determined", Toast.LENGTH_LONG).show();
    }
}
   }
Run Code Online (Sandbox Code Playgroud)

Gal*_*Rom 11

我在真实设备上运行我的应用程序.我使用网络而不是GPS,并调用onLocationChanged:

locMan.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, this, null);
Run Code Online (Sandbox Code Playgroud)


EPS*_*468 6

您是否从未获得过某个位置,或者只是在您的评论中写下"有时它会获得位置但不会在点击时".

可能是你的代码比LocationManager更快,而LocationManager可能还没有调用onLocationChanged().更改代码以获取最后的已知位置,或者等到调用locListener:

locManager.requestLocationUpdates(
  LocationManager.GPS_PROVIDER, 1000, 1, locListener);
mobileLocation = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (mobileLocation != null) {
Run Code Online (Sandbox Code Playgroud)


小智 6

LocationManager.NETWORK_PROVIDER需要网络,但它是真实的,而不是精确的;如果要使用LocationManager.GPS_PROVIDER,必须在室外而不是室内,因为GPS定位需要卫星,如果你在任何建筑物内,卫星都找不到你!