三星Galaxy S3无法获取用户位置



我有下面的类来获取用户位置。

public class GetUserLocation extends Activity {
Timer timer1;
LocationManager locationManager = null;
LocationResult locationResult;
boolean gpsEnabled = false;
boolean networkEnabled = false;
public static Location userLocation = null;
public String checkProviders(Context context) {
    if (locationManager == null) {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    }
    try {
        gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
        ex.printStackTrace();
        gpsEnabled = false;
    }
    try {
        networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {
        ex.printStackTrace();
        networkEnabled = false;
    }
    if(!gpsEnabled && !networkEnabled)
        return "No Location Service Found.nPlease turn on your location service bynenabling GPS or Data Service or WI-FI";
    if(gpsEnabled && !networkEnabled)
        return "No Internet Service Found.nPlease turn on your inernet service bynenabling Data Service or WI-FI";
    return null;
}
public boolean getLocation(Context context, LocationResult result) {
    locationResult = result;
    if (locationManager == null) {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    }
    // exceptions will be thrown if provider is not permitted.
    try {
        gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
    }
    try {
        networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    // don't start listeners if no provider is enabled
    if (!gpsEnabled && !networkEnabled)
        return false;
    if (gpsEnabled) {
        locationManager.removeUpdates(locationListenerGps);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListenerGps);
    }
    if (networkEnabled) {
        locationManager.removeUpdates(locationListenerNetwork);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,locationListenerNetwork);
    }
    timer1 = new Timer();
    //timer1.schedule(new GetLastLocation(), 30000);
    return true;
}
LocationListener locationListenerGps = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        locationManager.removeUpdates(this);
        locationManager.removeUpdates(locationListenerNetwork);
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
};
LocationListener locationListenerNetwork = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        locationManager.removeUpdates(this);
        locationManager.removeUpdates(locationListenerGps);
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
};
//  class GetLastLocation extends TimerTask {
//      @Override
//      public void run() {
//          
//          locationManager.removeUpdates(locationListenerGps);
//          locationManager.removeUpdates(locationListenerNetwork);
//          
//          Location networkLocation = null, gpsLocation = null;
//          if (gpsEnabled) {
//              //t = Calendar.getInstance().getTimeInMillis();
//              gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//          }
//          
//          if (networkEnabled) {
//              networkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//          }
//          
//          // if there are both values use the latest one
//          if (gpsLocation != null && networkLocation != null) {
//              
//              if (gpsLocation.getTime() > networkLocation.getTime())
//                  locationResult.gotLocation(gpsLocation);
//              else
//                  locationResult.gotLocation(networkLocation);
//              
//              return;
//          }
//          
//          if (gpsLocation != null) {
//              locationResult.gotLocation(gpsLocation);
//              return;
//          }
//          
//          if (networkLocation != null) {
//              locationResult.gotLocation(networkLocation);
//              return;
//          }
//          
//          locationResult.gotLocation(null);
//      }
//  }
public static abstract class LocationResult {
    public abstract void gotLocation(Location location);
}
public void removeUpdates() {
    if(timer1!=null) {
        timer1.cancel();
    }
    locationManager.removeUpdates(locationListenerGps);
    locationManager.removeUpdates(locationListenerNetwork);
    userLocation = null;
    locationResult.gotLocation(null);
}
public Timer getTimer() {
    return this.timer1;
}
}

这个代码是工作良好的其他设备,但不是在银河s3。但是在S3设备的测试中,谷歌地图得到了用户的位置修复。

谁能说一下为什么会发生这种情况?

我解决了这样一个问题,安装了APP GPS Status,重置了GPS。解决方案见:http://productforums.google.com/forum/!主题/地图/q24Cq4sQAtc % 5 b1-25-false % 5 d
或者,尝试从"地图"中清除应用程序数据。然后,您需要在提示时重新授予对位置服务的访问权限。

拥抱

相关内容

  • 没有找到相关文章

最新更新