2012-03-31 2 views
1

MapView을 사용하는 앱이 있는데 일부 라벨에서는 사용자의 위도, 경도 및 수평 정확도가 인쇄됩니다. 이 모든 것은 내 HTC 산불에서 잘 작동하지만 내 SE Xperia에서 Location.getLatitude(), Location.getLongitude() 또는 Location.getAccuracy()을 터치하려고하면 앱이 다운됩니다.위치 방법 호출 일부 기기에서 충돌이 발생했습니다.

Xperia의 GPS가 너무 느려 위치 관리자가 좌표를 가져 오지 않았을 가능성이 있습니다.하지만 위도, 경도 및 정확도를 폴링 할 때 좌표를 얻지 못했습니다.하지만 어떻게하면이를 방지 할 수 있습니까? ?

 mapView.setBuiltInZoomControls(false); 
     mc = mapView.getController(); 
     int maxLat = (int) (34.07687 * 1E6); 
     int maxLon = (int) (-118.438239 * 1E6); 
     int minLat = (int) (34.06489 * 1E6); 
     int minLon = (int) (-118.452358 * 1E6); 
     List <Overlay> overlays = mapView.getOverlays(); 

     MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); 
     myLocationOverlay.enableMyLocation(); 
     overlays.add(myLocationOverlay); 

     mc.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon)); 

     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
     Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 



     GeoPoint gp = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6)); 

로그 캣 출력 :

01-09 13:32:04.086: W/dalvikvm(1794): threadid=1: thread exiting with uncaught exception (group=0x2aac8560) 
01-09 13:32:04.086: E/AndroidRuntime(1794): FATAL EXCEPTION: main 
01-09 13:32:04.086: E/AndroidRuntime(1794): java.lang.NullPointerException 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at no.tibeapp.sno.UlovligeGarnActivity$1.run(UlovligeGarnActivity.java:180) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at android.os.Handler.handleCallback(Handler.java:587) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at android.os.Looper.loop(Looper.java:123) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at android.app.ActivityThread.main(ActivityThread.java:3701) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at java.lang.reflect.Method.invoke(Method.java:507) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
01-09 13:32:04.086: E/AndroidRuntime(1794):  at dalvik.system.NativeStart.main(Native Method) 
+0

는 로그 캣 무엇을 인쇄 않습니다 시도 코드를 동봉하여 대처해야합니까? –

+0

@Alex 방금 logcat 출력으로 Q를 업데이트했습니다. - NullPointerException로 보입니다. – PinkFloydRocks

답변

3

LocationManager.getLastKnownLocation()가 null 반환 할 수 있기 때문이다

여기에 코드 조각입니다.

코드에서 GPS 제공 업체에 사용자의 위치를 ​​업데이트하도록 요청했습니다. 그러나 장치의 GPS가 꺼져 있으면 해당 메서드는 null을 반환합니다.

요청이 LocationManager를 통해 처리되지 않은 경우 LocationManager.getLastKnownLocation()도 null 값을 반환합니다. LocationManager에 "마지막으로 알려진 위치"값이 없으므로

당신은 당신의 코드와 성공을 얻을하려는 경우, 장치의 GPS가 켜져,

$adb shell dumpsys location 

따라서 (당신은 ADB 명령을 다음과 같이을 locationManager의 상태를 확인하실 수 있습니다)과을 locationManager는 "마지막으로 성공한 위치"

있다

음, 나는 또한 LocationManager.getLastKnownLocation() 방법을 사용하지만 약간 다릅니다.

"마지막으로 알려진 위치"값이 LocationManager.getLastKnownLocation() 방법인지 확인합니다. 그것은 현재 위치 값을 확인하는 가장 빠른 방법입니다. 그러나 null을 반환하면 requestLocationUpdates을 통해 위치 업데이트를 요청하십시오.

기술적 인 해결 장치의 위치도 있습니다. 거대한 대답이 될 것 같습니다. 대신 위치에 대한 설명이 포함 된 video을 연결하겠습니다. (및 기타 자세한 도움말!) 다음

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

위치가 null이 될 줄 뒤에 전혀 수정을 가지고 있지 않은 경우

1

. 따라서 당신은

if (location != null){ 
    // your code 
} 
+0

예 - 질문을 올린 직후에이를 발견하고 직접 답변 할 예정 이었지만 최대한 빨리 7 시간을 기다려야했습니다. 답변을 주셔서 감사합니다! – PinkFloydRocks

1

와 위치를 필요로하거나 충돌이

private class JavaScriptInterface { // use in javascript 
    public double getLatitude() { 
     try{ 
      return mostRecentLocation.getLatitude(); 
     }catch(Exception e){ //some devive without last location 
      return 25.046254;//default set Taipei Train Station (City Land Mark) 
     } 
    } 
    public double getLongitude() { 
     try{ 
      return mostRecentLocation.getLongitude(); 
     }catch(Exception e){ //some devive without last location 
      return 121.51752;//default set Taipei Train Station (City Land Mark) 
     } 
    } 
} 
관련 문제