package com.gfg.application_java;
import android.Manifest;
import android.content.ContentValues;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
Button click;
private static final int PERMISSION_REQUEST_CODE = 100;
private String[] PERMISSIONS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
click = findViewById(R.id.clickme);
// Set up required permissions based on Android version
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
PERMISSIONS = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE
};
} else {
PERMISSIONS = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
}
checkPermissions();
// Adding beep sound
final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.beep);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Take screenshot
View rootView = getWindow().getDecorView().getRootView();
if (takeScreenshot(rootView)) {
Toast.makeText(MainActivity.this, "Screenshot captured! Check your gallery.",
Toast.LENGTH_SHORT).show();
mediaPlayer.start();
} else {
Toast.makeText(MainActivity.this, "Failed to save screenshot",
Toast.LENGTH_SHORT).show();
}
}
});
}
// Method to Take Screenshot of the View
private boolean takeScreenshot(View view) {
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);
String fileName = "Screenshot_" + dateFormat.format(now);
// Enable drawing cache
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
return saveBitmap(bitmap, fileName);
}
// Method to Save the Image in the Gallery
private boolean saveBitmap(Bitmap bitmap, String fileName) {
OutputStream outputStream = null;
try {
// Handle saving based on Android version
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// For Android 10 and above: Use MediaStore
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName + ".jpeg");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if (uri != null) {
outputStream = getContentResolver().openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
return true;
}
} else {
// For older Android versions: Use file system directly
File imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
if (!imagesDir.exists()) {
imagesDir.mkdirs();
}
File imageFile = new File(imagesDir, fileName + ".jpeg");
outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
// Check the Permissions
private boolean checkPermissions() {
// Check if we have the required permissions
for (String permission : PERMISSIONS) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
// If we don't have any of the permissions, request them
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_REQUEST_CODE);
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions
, @NonNull int[] grantResults) {
// Calling the Parent Class Method
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
boolean allGranted = true;
// Check if all permissions were granted
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
// If Permission Fails
if (!allGranted) {
Toast.makeText(this, "Permissions required to save screenshots"
, Toast.LENGTH_LONG).show();
}
}
}
}