Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to take a screenshot of a current Activity and then share it?

I need to take a screenshot of Activity (without the title bar, and the user should NOT see that a screenshot has actually been taken) and then share it via an action menu button "share". I have already tried some solutions, but they didn't work for me. Any ideas?

like image 333
just_deko Avatar asked May 12 '15 16:05

just_deko


People also ask

How do you take a screenshot and then save it?

Press "Win-PrtScn" at the same time. If you're using a laptop keyboard, press the "Fn" key, too. If you're using a tablet, press the "Windows" button and the "Volume Down" button simultaneously. The screen dims as the image is captured, and the image is saved to a folder named "Screenshots" in your Pictures Library.


1 Answers

This is how I captured the screen and shared it.

First, get root view from current activity:

View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 

Second, capture the root view:

 public static Bitmap getScreenShot(View view) {        View screenView = view.getRootView();        screenView.setDrawingCacheEnabled(true);        Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());        screenView.setDrawingCacheEnabled(false);        return bitmap;  } 

Third, store the Bitmap into the SDCard:

public static void store(Bitmap bm, String fileName){     final static String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots";     File dir = new File(dirPath);     if(!dir.exists())         dir.mkdirs();     File file = new File(dirPath, fileName);     try {         FileOutputStream fOut = new FileOutputStream(file);         bm.compress(Bitmap.CompressFormat.PNG, 85, fOut);         fOut.flush();         fOut.close();     } catch (Exception e) {         e.printStackTrace();     } } 

At last, share the screenshot of current Activity:

private void shareImage(File file){     Uri uri = Uri.fromFile(file);     Intent intent = new Intent();     intent.setAction(Intent.ACTION_SEND);     intent.setType("image/*");      intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");     intent.putExtra(android.content.Intent.EXTRA_TEXT, "");     intent.putExtra(Intent.EXTRA_STREAM, uri);     try {         startActivity(Intent.createChooser(intent, "Share Screenshot"));     } catch (ActivityNotFoundException e) {         Toast.makeText(context, "No App Available", Toast.LENGTH_SHORT).show();     } } 

I hope you will be inspired by my codes.

UPDATE:

Add below permissions into your AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Because it creates and accesses files in external storage.

UPDATE:

Starting from Android 7.0 Nougat sharing file links are forbiden. To deal with this you have to implement FileProvider and share "content://" uri not "file://" uri.

Here is a good description how to do it.

like image 68
SilentKnight Avatar answered Sep 19 '22 06:09

SilentKnight