2012-04-22 2 views
6

내 코드는 사용자 위치를 찾고 애플리케이션 입력시지도에 마커를 배치해야합니다. 내 위치 값은 항상 null과 같으며 값을받지 못합니다.Google지도 api가 정확한 위치에 마커를 놓지 않음

if (location != null) { 
       lat = (int) (location.getLatitude() * 1E6); 
       longi = (int) (location.getLongitude() * 1E6); 
       GeoPoint ourLocation = new GeoPoint(lat, longi); 
       OverlayItem overlayItem = new OverlayItem(ourLocation, "AYO", 
         "Whats good yo"); 
       CustomPinpoint custom = new CustomPinpoint(d, CampusMap.this); 
       custom.insertPinpoint(overlayItem); 
       overlayList.add(custom); 

      } else { 
       Toast.makeText(CampusMap.this, "Couldn't get provider", 
         Toast.LENGTH_SHORT).show(); 

      } 

     } 
+0

if 문을 입력 할 때 Google 검색이 준비되지 않았습니까? Google Maps javascript API를 사용하며 검색이 완료되면 콜백 함수가 호출됩니다. 안드로이드에서 어떻게 작동하는지 모르겠다. –

+0

이 [링크] (http://stackoverflow.com/questions/9990209/cant-mark-while-showing-the-current-location-in-mapview/9990668#9990668)을 참조하십시오. 요구 사항 및 마커를 배치하는 방법에 대해 설명합니다. –

+0

마커를 잘 배치 할 수 있습니다. 내 문제는 시작시 미세한 위치가 나쁘다는 것입니다. 나는이 코드를 내 on 메소드에도 넣었지만, 다른 else 문장으로 곧바로 바라고있다. 내 사용 권한과 관련이 있습니까? –

답변

1

내가주의 사항은 다음과 같습니다 당신의 위치가 처음 발견 될 때까지 첫째

, 그것은 시간이 걸릴 수 있습니다, 원인이되는 그 문제는 위치가 널인지 만 확인하기 때문에 발생합니다.

또한 장치의 위치 서비스가 실제로 아무것도하기 전에 활성화되어 있는지 확인 할 수 있습니다

:

private void setupLocation() { 

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

    LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(final Location location) { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        mLocation = location; 
        //Log.d(TAG, "Latitude: " + location.getLatitude() + " - Longitude: " + location.getLongitude()); 

        saveLocation(); 
       } 
      }); 
     } 

     public void onStatusChanged(String provider, int status, Bundle extras) {} 

     public void onProviderEnabled(String provider) {} 

     public void onProviderDisabled(String provider) {} 
    }; 

      //Can set to GPS or network, whichever is available 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
} 
: 나는 공급자가 연결과 같이 사용할 수 I 설정되어 있는지했습니다 후

private boolean doLocationsCheck(){ 
    if(!checkLocationEnabled()){ 

     final CharSequence[] items = {"Yes", "No"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     builder.setCancelable(false); 
     builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?"); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       final int i = item; 
       runOnUiThread(new Runnable() { 
        public void run() {       
         if(i == 0){ 
          Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
          startActivity(intent); 
          quit(); 
         } 
         else{ 
          quit(); 
         } 

        } 
       }); 
      } 


     }).show(); 
     AlertDialog alert = builder.create(); 

     return false; 

    } 
    else { 
     return true; 
    } 
} 

private boolean checkLocationEnabled(){ 

    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); 
    boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    return enabled; 
} 

그러면 위치가 업데이트 될 때마다 전역 변수에 설정되고 환경 설정에 저장됩니다. 이렇게하면 공급자가 활성화되었지만 위치를 검색하는 데 시간이 오래 걸리는 경우에도 사용자는 응용 프로그램이 저장된 마지막 위치와 함께 응용 프로그램을 계속 사용할 수 있습니다 (처음 프로그램에 적용되지 않음) 실행됩니다.

나는 거기에서 많이 빠져 나갔다. 그러나 나는 그것이 실제로 설명이 필요 없거나 이전의 대답에서 이미 설명 되었기 때문에 그것이 정말로 필요 없다고 생각했다.

건배 ~

0
/* 
* getting the best location using the location manager 
* Constants.MINIMUM_TIME_BETWEEN_UPDATES = 1000 Constants.MINIMUM_TIME_BETWEEN_UPDATES  = 1 
*/ 
LocationManager mLocation; 
private String mBestProvider; 
// in your onCreate() do the following 
    mLocation = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
mBestProvider = mLocation.getBestProvider(criteria, false); 
Location location = mLocation.getLastKnownLocation(mBestProvider); 
mLocation.requestLocationUpdates(
      LocationManager.GPS_PROVIDER, 
      Constants.MINIMUM_TIME_BETWEEN_UPDATES, 
      Constants.MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
      new LocationListenerManager() 
    ); 


// and use the following locationListener inner class 


private class LocationListenerManager implements LocationListener { 

    public void onLocationChanged(Location location) { 
     String message = String.format(
       "New Location \n Longitude: %1$s \n Latitude: %2$s", 
       location.getLongitude(), location.getLatitude() 
     ); 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
     Toast.makeText(MapViewActivity.this, message, Toast.LENGTH_LONG).show(); 
     Log.v("poiint=====", ""+message); 

    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
     Toast.makeText(MapViewActivity.this, "Provider status changed", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderDisabled(String s) { 
     Toast.makeText(MapViewActivity.this, 
       "Provider disabled by the user. GPS turned off", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderEnabled(String s) { 
     Toast.makeText(MapViewActivity.this, 
       "Provider enabled by the user. GPS turned on", 
       Toast.LENGTH_LONG).show(); 
    } 

} 
0

당신은이 위치에서 onCreate 전에 위치 값을 얻을 수 있도록 만들에 전에 onstartActivity에서 locationlistener를 초기화해야합니다.

내가 여기에 근무하고 있던 GPS의 RPG와 비교적 유사한 문제 했어
관련 문제