Как программно сделать скриншот на Android?
В каждом телефоне Android есть функция делать скриншоты экранов. В этой статье мы собираемся объяснить, как делать скриншоты программно. Образец GIF приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье. Обратите внимание, что мы собираемся реализовать этот проект на языке Java .
Пошаговая реализация
Шаг 1: Создайте новый проект
Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Обратите внимание, что в качестве языка программирования выберите Java .
Шаг 2. Добавьте разрешение в файл AndroidManifest.xml.
Добавьте следующие разрешения в файл AndroidManifest.xml .
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
Шаг 3: Работа с файлом activity_main.xml
Перейдите к приложению > res > layout > activity_main.xml и добавьте приведенный ниже код в этот файл. Ниже приведен код файла activity_main.xml .
XML
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:gravity = "center" android:orientation = "vertical" tools:context = ".MainActivity" > < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Click on button to take screenshot" android:textColor = "#000" android:textSize = "20dp" android:textStyle = "bold" /> < Button android:id = "@+id/clickme" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginTop = "10dp" android:background = "@color/colorPrimary" android:text = "Click Me" /> </ LinearLayout > |
Шаг 4. Добавьте аудиофайл в папку Raw.
Обратитесь к папке Resource Raw в Android Studio и добавьте аудиофайл в папку 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); } } } |