0

사용자 위치를 가져 오는 데 다음 클래스가 있습니다.삼성 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 by\nenabling GPS or Data Service or WI-FI"; 

    if(gpsEnabled && !networkEnabled) 
     return "No Internet Service Found.\nPlease turn on your inernet service by\nenabling 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; 
} 

} 

이 코드는 다른 장치에는 적합하지만 galaxy s3에는 적합하지 않습니다. 그러나 테스트 S3 장치에서 Google지도는 사용자 위치 수정을 얻고 있습니다.

누구나 이런 일이 일어날 수 있습니까? 모든 힌트를 주시면 감사하겠습니다.

+0

"기타"장치 (Android OS, 모델)를 추가 할 수 있습니까? 어쩌면 4 개 이상의 기기에서 다른 것이있을 수 있습니다. Android 4 시뮬레이터에서 작동합니까? – madlymad

+0

@madlymad yeh 그것은 삼성 갤럭시 SII 4.0.4, 4.2 및 2.3 갤럭시 ACE에서 작동합니다. 하지만 그것 doint 아무것도 내가 SIII에 4.1.2와 사용자 위치 null을 얻고있다 –

+3

나는 동일한 문제에 직면하고있다. S3을 제외한 모든 삼성 휴대 전화에서 작동합니다. – Siddharth

답변