Android: как захватить изображение местоположения GPS

Я использую Карты Google для поиска местоположения по предоставленному адресу.

Я хочу сохранить изображение местоположения, которое я получаю от Google Maps onClick .

Кто-нибудь знает как это сделать?

Вот мой код для google map & storageing 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); } }

Я получаю эту ошибку

 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 

Я получаю ошибку в этом перкумуляторе

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

Пожалуйста, помогите мне .. спасибо заранее

Могли ли использовать статические карты в качестве решения, которое вы искали?

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

Я решил эту проблему. У меня возникла проблема с захватом изображения местоположения GPS. Я только что создал меню захвата, в котором после загрузки местоположения GPS можно захватить изображение, нажав кнопку меню захвата.

Вот полный код для захвата снимка экрана GPS и определения местоположения 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); } }

Спасибо за все .. Надеюсь, это поможет кому-то ..

Я считаю, что этот ответ поможет вам

  • Ошибка MediaPlayer setDataSource со статусом = 0x80000000 для Ringtone, установленного по пути файла 2.3.4
  • Как удалить уведомление после того, как действие было нажато
  • Передача массива String между двумя classами в приложении android
  • Как отобразить два столбца ListView в Android?
  • Android: автоматически выбирает debug / release Maps v2 api key?
  • Как добавить нижний колонтитул в ListView?
  • Почему для местоположения игровых сервисов необходимы разрешения android.permission.WRITE_EXTERNAL_STORAGE и android.permission.READ_EXTERNAL_STORAGE?
  • Сохранить bitmap в местоположении
  • smoothScrollToPositionFromTop () не всегда работает так, как должно
  • Как вернуть String или JSONObject из асинхронного обратного вызова с помощью Retrofit?
  • Передача пользовательских объектов между действиями?
  • Interesting Posts
    Давайте будем гением компьютера.