Here I share Android source code to take a screenshot of whole screen and save it in device gallery. There is two buttons, one for taking screenshot and the second for opening last screenshot.
Permission:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
MainActivity:
package com.zofiakreasi.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
Button button;
Button button2;
String folderName = "FolderName";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
takeScreenshot();
}
});
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openLastShot();
}
});
}
private void takeScreenshot(){
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
try{
File f = new File(Environment.getExternalStorageDirectory(), folderName);
if(!f.exists()) f.mkdirs();
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + folderName + "/" + now + ".jpg";
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
addToGallery(mPath, this);
openScreenshot(imageFile);
} catch (Throwable e) {
e.printStackTrace();
}
}
private void openScreenshot(File imageFile){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(imageFile);
intent.setDataAndType(uri, "image/*");
Toast.makeText(this, imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show();
startActivity(intent);
}
private void openLastShot(){
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + folderName + "/";
File dir = new File(mPath);
File[] files = dir.listFiles();
if(files.length == 0) Toast.makeText(this, "No shot found!", Toast.LENGTH_LONG).show();
else openScreenshot(files[files.length-1]);
}
private void addToGallery(String filePath, Context context){
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATA, filePath);
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
}
activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.zofiakreasi.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Take Screenshot"
android:id="@+id/button"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Last Shot"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true" />
</RelativeLayout>
This source code is mix of two tutorials and I did little bit changes. Here is original source:
https://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in-android
https://stackoverflow.com/questions/20859584/how-to-save-image-in-android-gallery