Capture screen shot of GoogleMap Android API V2 Capture screen shot of GoogleMap Android API V2 android android

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();            }        }    });

Check Doc here and here


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

My output is belowenter image description here