Capture screen shot of GoogleMap Android API V2
Update - Google has added a snapshot method**!:
The feature request for a method to take a screen shot of the Android Google Map API V2 OpenGL layer has been fulfilled.
To take a screenshot, simply implement the following interface:
public abstract void onSnapshotReady (Bitmap snapshot)
and call:
public final void snapshot (GoogleMap.SnapshotReadyCallback callback)
Example that takes a screenshot, then presents the standard "Image Sharing" options:
public void captureScreen() { SnapshotReadyCallback callback = new SnapshotReadyCallback() { @Override public void onSnapshotReady(Bitmap snapshot) { // TODO Auto-generated method stub bitmap = snapshot; OutputStream fout = null; String filePath = System.currentTimeMillis() + ".jpeg"; try { fout = openFileOutput(filePath, MODE_WORLD_READABLE); // Write the string to the file bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block Log.d("ImageCapture", "FileNotFoundException"); Log.d("ImageCapture", e.getMessage()); filePath = ""; } catch (IOException e) { // TODO Auto-generated catch block Log.d("ImageCapture", "IOException"); Log.d("ImageCapture", e.getMessage()); filePath = ""; } openShareImageDialog(filePath); } }; mMap.snapshot(callback); }
Once the image is finished being captured, it will trigger the standard "Share Image" dialog so the user can pick how they'd like to share it:
public void openShareImageDialog(String filePath) {File file = this.getFileStreamPath(filePath);if(!filePath.equals("")){ final ContentValues values = new ContentValues(2); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath()); final Uri contentUriFile = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); final Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setType("image/jpeg"); intent.putExtra(android.content.Intent.EXTRA_STREAM, contentUriFile); startActivity(Intent.createChooser(intent, "Share Image"));}else{ //This is a custom class I use to show dialogs...simply replace this with whatever you want to show an error message, Toast, etc. DialogUtilities.showOkDialogWithText(this, R.string.shareImageFailed);}}
Documentation is here
Below are the steps to capture screen shot of Google Map V2 with example
Step 1. open Android Sdk Manager (Window > Android Sdk Manager)
then Expand Extras
now update/install Google Play Services to Revision 10
ignore this step if already installed
Read Notes here https://developers.google.com/maps/documentation/android/releases#august_2013
Step 2. Restart Eclipse
Step 3. import com.google.android.gms.maps.GoogleMap.SnapshotReadyCallback;
Step 4. Make Method to Capture/Store Screen/image of Map like below
public void CaptureMapScreen() {SnapshotReadyCallback callback = new SnapshotReadyCallback() { Bitmap bitmap; @Override public void onSnapshotReady(Bitmap snapshot) { // TODO Auto-generated method stub bitmap = snapshot; try { FileOutputStream out = new FileOutputStream("/mnt/sdcard/" + "MyMapScreen" + System.currentTimeMillis() + ".png"); // above "/mnt ..... png" => is a storage path (where image will be stored) + name of image you can customize as per your Requirement bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); } catch (Exception e) { e.printStackTrace(); } } }; myMap.snapshot(callback); // myMap is object of GoogleMap +> GoogleMap myMap; // which is initialized in onCreate() => // myMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map_pass_home_call)).getMap();}
Step 5. Now call this CaptureMapScreen()
method where you want to capture the image
in my case i am calling this method on Button click in my onCreate()
which is working fine
like:
Button btnCap = (Button) findViewById(R.id.btnTakeScreenshot); btnCap.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { CaptureMapScreen(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } });
I capctured Map screenshot.It will be helpful
private GoogleMap map; private static LatLng latLong;
`
public void onMapReady(GoogleMap googleMap) { map = googleMap; setMap(this.map); animateCamera(); map.moveCamera (CameraUpdateFactory.newLatLng (latLong)); map.setOnMapLoadedCallback (new GoogleMap.OnMapLoadedCallback () { @Override public void onMapLoaded() { snapShot(); } }); }
`
snapShot() method for taking screenshot of map
public void snapShot(){ GoogleMap.SnapshotReadyCallback callback=new GoogleMap.SnapshotReadyCallback () { Bitmap bitmap; @Override public void onSnapshotReady(Bitmap snapshot) { bitmap=snapshot; try{ file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"map.png"); FileOutputStream fout=new FileOutputStream (file); bitmap.compress (Bitmap.CompressFormat.PNG,90,fout); Toast.makeText (PastValuations.this, "Capture", Toast.LENGTH_SHORT).show (); }catch (Exception e){ e.printStackTrace (); Toast.makeText (PastValuations.this, "Not Capture", Toast.LENGTH_SHORT).show (); } } };map.snapshot (callback);}