2012-04-22 9 views
6

मेरा कोड उपयोगकर्ताओं को स्थान ढूंढने और एप्लिकेशन में प्रवेश करने के बाद मानचित्र पर मार्कर लगाने के लिए माना जाता है। मेरा स्थान मान हमेशा शून्य के बराबर होता है, और कभी भी कोई मान प्राप्त नहीं होता है।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

हो सकता है कि आपकी Google खोज उस समय कथन में प्रवेश करने के समय तैयार न हो? मैं Google मानचित्र जावास्क्रिप्ट एपीआई का उपयोग करता हूं और एक कॉलबैक फ़ंक्शन होता है जिसे खोज पूर्ण होने पर बुलाया जाता है। यह नहीं पता कि यह एंड्रॉइड पर कैसे काम करता है। –

+0

इसका संदर्भ लें [LINK] (http://stackoverflow.com/questions/9990209/cant-mark-while-showing-the-current-location-in-mapview/9990668#9990668) इसमें आपके बारे में एक साफ और स्पष्ट स्पष्टीकरण है आवश्यकता और मार्कर कैसे रखें। –

+0

मैं मार्करों को बस ठीक कर सकता हूं, मेरी समस्या यह है कि यह शुरुआत पर ठीक स्थान नहीं है। मैंने इस कोड को मेरे निर्माण विधि में भी रखा है, यह सिर्फ मेरे अन्य कथन के लिए उम्मीद कर रहा है। क्या मुझे अपनी अनुमतियों के साथ क्या करना है? –

उत्तर

1

मैं मैं पर काम कर रहा था और यहाँ एक जीपीएस आरपीजी के साथ एक अपेक्षाकृत समान मुद्दा मिला है कुछ चीजें मैंने देखा हैं वह समस्या है क्योंकि आप केवल जांच कर रहे हैं कि स्थान शून्य है या नहीं।

तुम भी डिवाइस की स्थान सेवाएं वास्तव में कुछ भी करने से पहले लागू किए गए हैं यह सुनिश्चित करना चाहते हो सकता है:

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; 
} 

के बाद मुझे यकीन है कि प्रदाताओं इसलिए की तरह एक कनेक्शन उपलब्ध मैं सेटअप कर रहे हैं बनाया है:

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); 
} 

स्थान तब भी एक वैश्विक चर में सेट किया जाता है जब इसे अद्यतन किया जाता है, और फिर वरीयताओं में सहेजा जाता है। इस तरह, प्रदाता सक्षम होने की स्थिति में, लेकिन स्थान पुनर्प्राप्त करने में कुछ समय लग रहा है, उपयोगकर्ता अब भी अपने अंतिम ज्ञात स्थान के साथ एप्लिकेशन का उपयोग जारी रख सकता है जिसे ऐप संग्रहीत किया जाता है (प्रोग्राम के लिए पहली बार लागू नहीं होता है दौड़ हैं)।

मुझे पता है कि मैंने वहां बहुत कुछ छोड़ दिया है, लेकिन मुझे लगा कि यह वास्तव में आवश्यक नहीं था क्योंकि यह या तो स्वयं व्याख्यात्मक था या पहले के जवाब में पहले ही समझाया गया था।

चीयर्स ~

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

आप पर पहले onstartActivity में locationlistener प्रारंभ करने में है कि यह स्थान onCreate से पहले स्थान मान प्राप्त इतना बनाने के लिए है। ,

सबसे पहले, यह कुछ समय ले सकते हैं अपने स्थान के लिए शुरू में पाया जा सकता है कारण होगा जो:

संबंधित मुद्दे