2013-07-05 2 views
0

Мне удалось создать карту, которая показывает близлежащие местоположения, но не обновляет местоположения ... Есть ли что-то не в порядке с кодом..coz im, не найдя ничего неправильного ... любая помощь wud будет оценена. . заранее заблаговременноМестоположение не обновляется

package com.example.travelplanner; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URLEncoder; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.StatusLine; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.Toast; 


public class NearbyPlacesActivity extends Activity implements LocationListener { 

    //instance variables for Marker icon drawable resources 
    private int userIcon, foodIcon, drinkIcon, shopIcon, otherIcon; 

    //the map 
    private GoogleMap theMap; 

    //location manager 
    private LocationManager locMan; 

    //user marker 
    private Marker userMarker; 

    //places of interest 
    private Marker[] placeMarkers; 
    //max 
    private final int MAX_PLACES = 20;//most returned from google 
    //marker options 
    private MarkerOptions[] places; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_nearby_places); 

     //get drawable IDs 
     userIcon = R.drawable.yellow_point; 
     foodIcon = R.drawable.red_point; 
     drinkIcon = R.drawable.blue_point; 
     shopIcon = R.drawable.green_point; 
     otherIcon = R.drawable.purple_point; 

     //find out if we already have it 
     if(theMap==null){ 
      //get the map 
      theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap(); 
      //check in case map/ Google Play services not available 
      if(theMap!=null){ 
       //ok - proceed 
       theMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
       //create marker array 
       placeMarkers = new Marker[MAX_PLACES]; 

      } 

     } 
    } 

    //location listener functions 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.v("MyMapActivity", "location changed"); 
     updatePlaces(location); 
    } 
    @Override 
    public void onProviderDisabled(String provider){ 
     Log.v("MyMapActivity", "provider disabled"); 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
     Log.v("MyMapActivity", "provider enabled"); 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Log.v("MyMapActivity", "status changed"); 
    } 

    /* 
    * update the place markers 
    */ 
    private void updatePlaces(Location givenlocation){ 
     //get location manager 
     double lat = givenlocation.getLatitude(); 
     double lng = givenlocation.getLongitude(); 
     Toast.makeText(getApplicationContext(), lat+","+lng, Toast.LENGTH_LONG).show(); 
     //create LatLng 
     LatLng lastLatLng = new LatLng(lat, lng); 

     //remove any existing marker 
     if(userMarker!=null) userMarker.remove(); 
     //create and set marker properties 
     userMarker = theMap.addMarker(new MarkerOptions() 
     .position(lastLatLng) 
     .title("You are here") 
     .icon(BitmapDescriptorFactory.fromResource(userIcon)) 
     .snippet("Your last recorded location")); 
     //move to location 
     theMap.animateCamera(CameraUpdateFactory.newLatLng(lastLatLng), 3000, null); 

     //build places query string 
     @SuppressWarnings("deprecation") 
     String encodedstr = URLEncoder.encode("food|bar|movie_theater|museum|bank"); 
     String placesSearchStr = "https://maps.googleapis.com/maps/api/place/nearbysearch/" + 
       "json?location="+lat+","+lng+ 
       "&radius=7000&sensor=true"+ 
       "&types="+encodedstr+ 
       "&key=AIzaSyBqDgqbxFenOtooTivY5YSsJ2JrwBK42hw";//ADD KEY 

     //execute query 
     new GetPlaces().execute(placesSearchStr);  
     locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 100, this); 
    } 

    private class GetPlaces extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... placesURL) { 
      //fetch places 

      //build result as string 
      StringBuilder placesBuilder = new StringBuilder(); 
      //process search parameter string(s) 
      for (String placeSearchURL : placesURL) { 
       HttpClient placesClient = new DefaultHttpClient(); 
       try { 
        //try to fetch the data 

        //HTTP Get receives URL string 
        HttpGet placesGet = new HttpGet(placeSearchURL); 
        //execute GET with Client - return response 
        HttpResponse placesResponse = placesClient.execute(placesGet); 
        //check response status 
        StatusLine placeSearchStatus = placesResponse.getStatusLine(); 
        //only carry on if response is OK 
        if (placeSearchStatus.getStatusCode() == 200) { 
         //get response entity 
         HttpEntity placesEntity = placesResponse.getEntity(); 
         //get input stream setup 
         InputStream placesContent = placesEntity.getContent(); 
         //create reader 
         InputStreamReader placesInput = new InputStreamReader(placesContent); 
         //use buffered reader to process 
         BufferedReader placesReader = new BufferedReader(placesInput); 
         //read a line at a time, append to string builder 
         String lineIn; 
         while ((lineIn = placesReader.readLine()) != null) { 
          placesBuilder.append(lineIn); 
         } 
        } 
       } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
      return placesBuilder.toString(); 
     } 
     //process data retrieved from doInBackground 
     protected void onPostExecute(String result) { 
      //parse place data returned from Google Places 
      //remove existing markers 
      if(placeMarkers!=null){ 
       for(int pm=0; pm<placeMarkers.length; pm++){ 
        if(placeMarkers[pm]!=null) 
         placeMarkers[pm].remove(); 
       } 
      } 
      try { 
       //parse JSON 

       //create JSONObject, pass stinrg returned from doInBackground 
       JSONObject resultObject = new JSONObject(result); 
       //get "results" array 
       JSONArray placesArray = resultObject.getJSONArray("results"); 
       //marker options for each place returned 
       places = new MarkerOptions[placesArray.length()]; 
       //loop through places 
       for (int p=0; p<placesArray.length(); p++) { 
        //parse each place 
        //if any values are missing we won't show the marker 
        boolean missingValue=false; 
        LatLng placeLL=null; 
        String placeName=""; 
        String vicinity=""; 
        int currIcon = otherIcon; 
        try{ 
         //attempt to retrieve place data values 
         missingValue=false; 
         //get place at this index 
         JSONObject placeObject = placesArray.getJSONObject(p); 
         //get location section 
         JSONObject loc = placeObject.getJSONObject("geometry") 
           .getJSONObject("location"); 
         //read lat lng 
         placeLL = new LatLng(Double.valueOf(loc.getString("lat")), 
           Double.valueOf(loc.getString("lng"))); 
         //get types 
         JSONArray types = placeObject.getJSONArray("types"); 
         //loop through types 
         for(int t=0; t<types.length(); t++){ 
          //what type is it 
          String thisType=types.get(t).toString(); 
          //check for particular types - set icons 
          if(thisType.contains("food")){ 
           currIcon = foodIcon; 
           break; 
          } 
          else if(thisType.contains("bar")){ 
           currIcon = drinkIcon; 
           break; 
          } 
          else if(thisType.contains("movie_theater")){ 
           currIcon = shopIcon; 
           break; 
          } 
         } 
         //vicinity 
         vicinity = placeObject.getString("vicinity"); 
         //name 
         placeName = placeObject.getString("name"); 
        } 
        catch(JSONException jse){ 
         Log.v("PLACES", "missing value"); 
         missingValue=true; 
         jse.printStackTrace(); 
        } 
        //if values missing we don't display 
        if(missingValue) places[p]=null; 
        else 
         places[p]=new MarkerOptions() 
        .position(placeLL) 
        .title(placeName) 
        .icon(BitmapDescriptorFactory.fromResource(currIcon)) 
        .snippet(vicinity); 
       } 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      if(places!=null && placeMarkers!=null){ 
       for(int p=0; p<places.length && p<placeMarkers.length; p++){ 
        //will be null if a value was missing 
        if(places[p]!=null) 
         placeMarkers[p]=theMap.addMarker(places[p]); 

      } 

     } 
    } 
} 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     if(theMap!=null){ 
      //get location manager 
     locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     //get last location 
     Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 100, this); 
     updatePlaces(lastLoc); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if(theMap!=null){ 
      locMan.removeUpdates(this); 
     } 
    } 
} 

ответ

0

Пожалуйста, постарайтесь использовать этот класс.

общественный класс LocationListenerClass { закрытый статический экземпляр LocationListenerClass; закрытый статический контекст контекста; private LocationManager myLocationManager; private LocationListener myLocationListener; private static Double latitude = 0d; частная статическая двойная долгота = 0d;

public static LocationListenerClass getInstance(Context context) { 
    LocationListenerClass.context = context; 
    if (null == instance) { 
     instance = new LocationListenerClass(); 
    } 
    return instance; 
} 

public void getCurrentLocation() { 
    try { 
     myLocationManager = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 
     myLocationListener = new MyLocationListener(); 
     myLocationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 30000, 100, 
       myLocationListener); 

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

     if (location == null) { 
      myLocationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 30000, 100, 
        myLocationListener); 
      location = myLocationManager 
        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     } 

     if (location != null) { 
      try { 
       latitude = location.getLatitude(); 
       Data.CURENT_LATITUDE = latitude; 
       Log.v(ConstantLib.LOG, " latitude : " 
         + Data.CURENT_LATITUDE); 
       longitude = location.getLongitude(); 
       Data.CURENT_LONGITUDE = longitude; 
       Log.v(ConstantLib.LOG, " longitude : " 
         + Data.CURENT_LONGITUDE); 

      } catch (Exception e) { 
      } 

     } 
    } catch (Exception e) { 
    } 

} 

public void removeLocationUpdates() { 
    try { 
     if (myLocationManager != null) { 
      myLocationManager.removeUpdates(myLocationListener); 
     } 
    } catch (Exception e) { 
    } 
} 

class MyLocationListener implements LocationListener { 

    public void onLocationChanged(Location location) { 

     try { 
      if (location != null) { 
       Data.CURENT_LATITUDE = location.getLatitude(); 
       Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " latitude : " 
         + Data.CURENT_LATITUDE); 
       longitude = location.getLongitude(); 
       Data.CURENT_LONGITUDE = location.getLongitude(); 
       Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " longitude : " 
         + Data.CURENT_LONGITUDE); 
      } 
     } catch (Exception e) { 

     } 

    } 

    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
    } 
} 

}

+0

может у плз объяснить изменения Ват являются у делают ... и что случилось с моим кодом ...? – Divyang

Смежные вопросы