在每部Android手机中,我们都有拍摄屏幕截图的功能。在本文中,我们将解释如何以编程方式拍摄屏幕截图。下面给出了一个示例GIF,以了解我们将在本文中做些什么。注意,我们将使用Java语言实现该项目。
分步实施
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。
步骤2:向AndroidManifest.xml文件添加权限
将以下权限添加到AndroidManifest.xml文件
步骤3:使用activity_main.xml文件
导航到应用程序> res>布局> activity_main.xml,然后将以下代码添加到该文件中。以下是activity_main.xml文件的代码。
XML
Java
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
Button click;
private static final int REQUEST_EXTERNAL_STORAGe = 1;
private static String[] permissionstorage = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
click = findViewById(R.id.clickme);
verifystoragepermissions(this);
// adding beep sound
final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.beep);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "You just Captured a Screenshot," +
" Open Gallery/ File Storage to view your captured Screenshot", Toast.LENGTH_SHORT).show();
screenshot(getWindow().getDecorView().getRootView(), "result");
mediaPlayer.start();
}
});
}
protected static File screenshot(View view, String filename) {
Date date = new Date();
// Here we are initialising the format of our image name
CharSequence format = android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", date);
try {
// Initialising the directory of storage
String dirpath = Environment.getExternalStorageDirectory() + "";
File file = new File(dirpath);
if (!file.exists()) {
boolean mkdir = file.mkdir();
}
// File name
String path = dirpath + "/" + filename + "-" + format + ".jpeg";
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File imageurl = new File(path);
FileOutputStream outputStream = new FileOutputStream(imageurl);
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);
outputStream.flush();
outputStream.close();
return imageurl;
} catch (FileNotFoundException io) {
io.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// verifying if storage permission is given or not
public static void verifystoragepermissions(Activity activity) {
int permissions = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
// If storage permission is not given then request for External Storage Permission
if (permissions != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, permissionstorage, REQUEST_EXTERNAL_STORAGe);
}
}
}
步骤4:将音频文件添加到Raw文件夹
请参考Android Studio中的Resource Raw文件夹,然后将音频文件添加到Raw文件夹。
步骤5:使用MainActivity。 Java文件
转到MainActivity。 Java文件并参考以下代码。下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。
Java
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
Button click;
private static final int REQUEST_EXTERNAL_STORAGe = 1;
private static String[] permissionstorage = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
click = findViewById(R.id.clickme);
verifystoragepermissions(this);
// adding beep sound
final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.beep);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "You just Captured a Screenshot," +
" Open Gallery/ File Storage to view your captured Screenshot", Toast.LENGTH_SHORT).show();
screenshot(getWindow().getDecorView().getRootView(), "result");
mediaPlayer.start();
}
});
}
protected static File screenshot(View view, String filename) {
Date date = new Date();
// Here we are initialising the format of our image name
CharSequence format = android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", date);
try {
// Initialising the directory of storage
String dirpath = Environment.getExternalStorageDirectory() + "";
File file = new File(dirpath);
if (!file.exists()) {
boolean mkdir = file.mkdir();
}
// File name
String path = dirpath + "/" + filename + "-" + format + ".jpeg";
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File imageurl = new File(path);
FileOutputStream outputStream = new FileOutputStream(imageurl);
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);
outputStream.flush();
outputStream.close();
return imageurl;
} catch (FileNotFoundException io) {
io.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// verifying if storage permission is given or not
public static void verifystoragepermissions(Activity activity) {
int permissions = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
// If storage permission is not given then request for External Storage Permission
if (permissions != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, permissionstorage, REQUEST_EXTERNAL_STORAGe);
}
}
}