Android Open Source - GeoTagger Map View






From Project

Back to project page GeoTagger.

License

The source code is released under:

GNU General Public License

If you think the Android project GeoTagger listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package horizon.geotagger.view;
// w ww  .  j a v a 2s.c o  m
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
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.apache.http.util.EntityUtils;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MyLocationOverlay;

import horizon.geotagger.AlertService;
import horizon.geotagger.R;
import horizon.geotagger.model.Tag;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MapView 
extends MapActivity
{
  private MyLocationOverlay myLocationOverlay;
  
  private TagOverlay tagOverlay;
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {
    getMenuInflater().inflate(R.layout.mapview_menu, menu);
    return true;
  }
  
  private Timer timer;
  
  private class GetTask
  extends TimerTask
  {
    @Override
    public void run()
    {
      HttpClient client = new DefaultHttpClient();
      HttpGet get = new HttpGet("http://horizon-geotagger.appspot.com/tagsInBox?" +
          "north=90&south=-90&west=-180&east=180");
      HttpResponse response;
      try 
      {
        response = client.execute(get);
        StatusLine sl = response.getStatusLine();
        if(sl.getStatusCode() != HttpStatus.SC_OK)
        {
          get.abort();
          return;
        }
        
        HttpEntity entity = response.getEntity();
        if(entity == null)
          return;
                
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node = mapper.readTree(EntityUtils.toString(entity, "UTF-8"));
        ArrayList<Tag> tags = new ArrayList<Tag>();
        
        if(!node.isArray() || node.isNull())
          return;
        
        for(Iterator<JsonNode> i = node.getElements(); i.hasNext(); )
          tags.add(mapper.treeToValue(i.next(), Tag.class));
        
        if(tags.size() == 0)
          return;
      
        com.google.android.maps.MapView mv = 
          (com.google.android.maps.MapView)findViewById(R.id.mapview);
        synchronized(mv.getOverlays())
        {
          if(tagOverlay != null)
            mv.getOverlays().remove(tagOverlay);
          tagOverlay = new TagOverlay(
              new BitmapDrawable(BitmapFactory.decodeResource(MapView.this.getResources(), R.drawable.icon)),
              tags);
          mv.getOverlays().add(tagOverlay);
        }
        mv.postInvalidate();
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
    }  
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item)
  {
    if(item.getItemId() == R.id.mapview_menu_exit)
    {
      exit();
      return true;
    }
    
    if(!isGpsEnabled())
    {
      displayGpsDisabledAlert();
      return true;
    }
    
    switch (item.getItemId())
    {
    case R.id.mapview_menu_mylocation:
      gotoMyLocation();
      return true;
    case R.id.mapview_menu_newtag:
      Intent i = new Intent("horizon.geotagger.ACTION_DO_GEOTAG");
      i.putExtra("location", myLocationOverlay.getLastFix());
      startActivity(i);
      return true;
    default:
      return false;
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);
    com.google.android.maps.MapView mv = 
        (com.google.android.maps.MapView)findViewById(R.id.mapview);
    mv.setBuiltInZoomControls(true);
  }

  @Override
  protected void onPause()
  {
    super.onPause();
    myLocationOverlay.disableMyLocation();
    com.google.android.maps.MapView mv = 
        (com.google.android.maps.MapView)findViewById(R.id.mapview);
    synchronized(mv.getOverlays())
    {
      mv.getOverlays().remove(myLocationOverlay);
      if(tagOverlay != null)
        mv.getOverlays().remove(tagOverlay);
    }
    timer.cancel();
    timer = null;
  }
  
  @Override
  protected void onResume()
  {
    super.onResume();
    if(!isGpsEnabled())
      displayGpsDisabledAlert();
    
    com.google.android.maps.MapView mv = 
        (com.google.android.maps.MapView)findViewById(R.id.mapview);
    synchronized(mv.getOverlays())
    {
      if(myLocationOverlay == null)
        myLocationOverlay = new MyLocationOverlay(this, mv);
      myLocationOverlay.enableMyLocation();
      mv.getOverlays().add(myLocationOverlay);
    }
    mv.postInvalidate();
    
    timer = new Timer(true);
    timer.scheduleAtFixedRate(new GetTask(), 0, 60000);
  }
  
  @Override
  protected boolean isRouteDisplayed()
  {
    return false;
  }
  
  private void gotoMyLocation()
  {
    MapController mc = ((com.google.android.maps.MapView)
        findViewById(R.id.mapview)).getController();
    mc.animateTo(myLocationOverlay.getMyLocation());
  }
  
  private void displayGpsDisabledAlert()
  {
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    alertBuilder.setMessage(R.string.gps_disabled_warning)
        .setCancelable(true)
        .setNegativeButton(R.string.close_gps_disabled_warning, 
            new DialogInterface.OnClickListener()
        {
          @Override
          public void onClick(DialogInterface dialog, int which)
          {
            dialog.cancel();    
          }
        })
        .create()
        .show();      
  }
  
  private boolean isGpsEnabled()
  {
    LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE);
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
  }
  
  private void exit()
  {
    stopService(new Intent(getApplicationContext(), AlertService.class));
    finish();
  }
}




Java Source Code List

horizon.android.logging.Logger.java
horizon.geotagger.AlertService.java
horizon.geotagger.Base64.java
horizon.geotagger.GeoTagger.java
horizon.geotagger.GeoTagger.java
horizon.geotagger.GeoUtils.java
horizon.geotagger.GeoUtils.java
horizon.geotagger.JavaLoggingAppender.java
horizon.geotagger.JspUtils.java
horizon.geotagger.PMF.java
horizon.geotagger.PersconServiceConnection.java
horizon.geotagger.model.Attachment.java
horizon.geotagger.model.Attachment.java
horizon.geotagger.model.Place.java
horizon.geotagger.model.Place.java
horizon.geotagger.model.Tag.java
horizon.geotagger.model.Tag.java
horizon.geotagger.server.AddTagServlet.java
horizon.geotagger.server.CallbackServlet.java
horizon.geotagger.server.DataBinder.java
horizon.geotagger.server.ModelAndView.java
horizon.geotagger.server.ServletWithView.java
horizon.geotagger.server.TagsAtPointData.java
horizon.geotagger.server.TagsAtPointServlet.java
horizon.geotagger.server.TagsInBoxData.java
horizon.geotagger.server.TagsInBoxServlet.java
horizon.geotagger.view.CameraSurfaceView.java
horizon.geotagger.view.DoImageTagView.java
horizon.geotagger.view.DoTagView.java
horizon.geotagger.view.DoTextTagView.java
horizon.geotagger.view.MapView.java
horizon.geotagger.view.TagOverlay.java
horizon.geotagger.view.TagView.java