Android: cómo capturar una imagen de la ubicación del GPS

Estoy usando Google Maps para encontrar la ubicación en una dirección proporcionada.

Quiero almacenar la imagen de la ubicación que obtengo de Google Maps onClick .

¿Alguien sabe como hacer esto?

Aquí está mi código para google map & storage onClick

 public class TestGPSActivity extends MapActivity { MapView mapView; private MapController mc; private GeoPoint p; private double lng; private double lat; private Address address; private View mCurrentUrlMask; private File imageFile; class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); //---translate the GeoPoint to screen pixels--- Point screenPts = new Point(); mapView.getProjection().toPixels(p, screenPts); //---add the marker--- Bitmap bmp = BitmapFactory.decodeResource( getResources(), R.drawable.pin); canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); return true; } } public boolean onTouchEvent(MotionEvent event, MapView mapView) { //---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Geocoder geoCoder = new Geocoder( getBaseContext(), Locale.getDefault()); try { List
addresses = geoCoder.getFromLocation( p.getLatitudeE6() / 1E6, p.getLongitudeE6() / 1E6, 1); String add = ""; if (addresses.size() > 0) { for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); i++) add += addresses.get(0).getAddressLine(i) + "\n"; } Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } return true; } else return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gps_main); mapView = (MapView) findViewById(R.id.mapView); mapView.setDrawingCacheEnabled(true); // image naming and path to include sd card appending name you choose for file String mPath = Environment.getExternalStorageDirectory().toString() + "/" + GPSActivity.DIRECTORY; // create bitmap screen capture Bitmap bitmap; View v1 = mapView.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); OutputStream fout = null; imageFile = new File(DemoCamGPSActivity.DIRECTORY); try { fout = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { System.out.println("in file not found"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); View zoomView = mapView.getZoomControls(); zoomLayout.addView(zoomView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mapView.displayZoomControls(true); mc = mapView.getController(); Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List
addresses = null; try { addresses = geocoder.getFromLocationName(getIntent().getStringExtra("address"), 1); } catch (IOException e) { } try{ address = addresses.get(0); } catch (Exception e) { flash("Unable to locate given address"); startActivity(new Intent(this, GPSMainActivity.class)); finish(); } try{ lng = address.getLongitude(); lat = address.getLatitude(); GPSActivity.writeLog(getIntent().getStringExtra("address") +" GPS co-ordibnates : "+lat+" , "+lng); }catch (Exception e) { } p = new GeoPoint( (int) (lat * 1E6), (int) (lng * 1E6)); mc.animateTo(p); mc.setZoom(17); //---Add a location marker--- MapOverlay mapOverlay = new MapOverlay(); List listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); mapView.invalidate(); mapView.invalidate(); } private void flash(String data) { Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { startActivity(new Intent(this, GPSMainActivity.class)); finish(); } return super.onKeyDown(keyCode, event); } }

Estoy recibiendo este error

 03-28 16:54:12.580: E/AndroidRuntime(30010): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mentha.Demo/com.mentha.Demo.TestGPSActivity}: java.lang.NullPointerException 

Estoy recibiendo un error en estos códigos perticulares

  // create bitmap screen capture Bitmap bitmap; View v1 = mapView.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); OutputStream fout = null; imageFile = new File(DemoCamGPSActivity.DIRECTORY); try { fout = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { System.out.println("in file not found"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Uri uri = Uri.fromFile(new File(mPath)); 

Por favor, ayúdenme … gracias de antemano

¿Podría el uso de mapas estáticos ser la solución que estabas buscando?

https://developers.google.com/maps/documentation/staticmaps/

He resuelto este problema. Estaba teniendo problemas con la captura de imágenes de la ubicación del GPS. Acabo de crear el menú de captura, en el que después de cargar la ubicación del GPS, se puede capturar la imagen haciendo clic en el botón de menú de captura.

Aquí está el código completo para capturar la captura de pantalla de la ubicación del GPS y cómo encontrar la ubicación del GPS.

 public class TestGPSActivity extends MapActivity { MapView mapView; private MapController mc; private GeoPoint p; private double lng; private double lat; private Address address; //google Map class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); //---translate the GeoPoint to screen pixels--- Point screenPts = new Point(); mapView.getProjection().toPixels(p, screenPts); //---add the marker--- Bitmap bmp = BitmapFactory.decodeResource( getResources(), R.drawable.pin); canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); return true; } } public boolean onTouchEvent(MotionEvent event, MapView mapView) { //---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Geocoder geoCoder = new Geocoder( getBaseContext(), Locale.getDefault()); try { List
addresses = geoCoder.getFromLocation( p.getLatitudeE6() / 1E6, p.getLongitudeE6() / 1E6, 1); String add = ""; if (addresses.size() > 0) { for (int i=0; i addresses = null; try { addresses = geocoder.getFromLocationName(getIntent().getStringExtra("address"), 1); } catch (IOException e) { e.printStackTrace(); } try{ address = addresses.get(0); } catch (Exception e) { flash("Unable to locate given address"); startActivity(new Intent(this, GPSMainActivity.class)); finish(); } try{ //stores the Longitude n lattitude in log file lng = address.getLongitude(); lat = address.getLatitude(); //for writing into log.text HomeActivity.writeLog(getIntent().getStringExtra("address") +" GPS co-ordibnates : "+lat+" , "+lng); }catch (Exception e) { e.printStackTrace(); } p = new GeoPoint( (int) (lat * 1E6), (int) (lng * 1E6)); mc.animateTo(p); mc.setZoom(17); //---Add a location marker--- MapOverlay mapOverlay = new MapOverlay(); List listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); mapView.invalidate(); //mapView.invalidate(); } //ScreenShot of Image private void screenshot() { try{ String mapDIR = HomeActivity.DIRECTORY+"/Image"; File f = new File(mapDIR); if(! f.exists()) { f.mkdir(); } MapView v1 = (MapView)findViewById(R.id.mapView); v1.setDrawingCacheEnabled(true); Bitmap b = Bitmap.createBitmap(v1.getDrawingCache()); try { FileOutputStream fos = new FileOutputStream(mapDIR+"/"+System.currentTimeMillis()+".png"); b.compress(CompressFormat.PNG, 50, fos); fos.close(); } catch (FileNotFoundException e) { Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); e.printStackTrace(); } v1.setDrawingCacheEnabled(false); // clear drawing cache }catch (Exception e) { Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); e.printStackTrace(); } } private void flash(String data) { Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { startActivity(new Intent(this, GPSMainActivity.class)); finish(); } return super.onKeyDown(keyCode, event); } //menu button @Override public boolean onCreateOptionsMenu(android.view.Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, 1, 0 , "Exit"); menu.add(0, 2, 0 , "Capture Image"); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch(item.getItemId()) { case 1: startActivity(new Intent(this, GPSMainActivity.class)); finish(); break; case 2: screenshot(); Toast.makeText(getApplicationContext(), "Captured Map", Toast.LENGTH_SHORT).show(); break; } return super.onMenuItemSelected(featureId, item); } }

Gracias por todos .. Espero que esto ayude a alguien …

Creo que esta respuesta te ayudaría