首页 > 解决方案 > 如何在 Android 中以编程方式截屏并分享

问题描述

如何在 Android 中以编程方式截屏并分享

当我尝试截取屏幕截图并将其保存在下载文件夹中时。它对我不起作用,它给了我一个错误。我是android应用程序开发的新手。所以,我不知道如何保存照片并将其分享到 WhatsApp


这是我的按钮:

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click to take a Screenshot"
        android:onClick="ScreenshotButton"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

在我的 Android 清单文件中(获得用户的许可):

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

这是我截取屏幕截图并保存在手机下载文件夹中的 Java 代码:

ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PackageManager.PERMISSION_GRANTED); //To check if user permitted or not

public void ScreenshotButton(View view){
    View view1 = getWindow().getDecorView().getRootView();
    view1.setDrawingCacheEnabled(true);

    Bitmap bitmap = Bitmap.createBitmap(view1.getDrawingCache());
    view1.setDrawingCacheEnabled(false);

    String filePath = Environment.getExternalStorageDirectory()+"/Download/"+Calendar.getInstance().getTime().toString()+".jpg";
    File fileScreenshot = new File(filePath);

FileOutputStream fileOutputStream = null;

    try {
        fileOutputStream = new FileOutputStream(fileScreenshot);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
        fileOutputStream.flush();
        fileOutputStream.close();


    } catch (Exception e) {
        e.printStackTrace();
    }


}

每次按下按钮时都会出现此错误:

I/.screenshottes: NativeAlloc concurrent copying GC freed 1732(166KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 1640KB/3281KB, paused 4.216ms total 245.239ms
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Downloads/Sat Jul 24 12:10:05 GMT+05:30 2021.jpg: open failed: ENOENT (No such file or directory)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:496)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
        at com.gprprinters.screenshottest.MainActivity.ScreenshotButton(MainActivity.java:44)
        at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:7125)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
        at libcore.io.Linux.open(Native Method)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
        at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7255)
        at libcore.io.IoBridge.open(IoBridge.java:482)
        ... 17 more
I/.screenshottes: NativeAlloc concurrent copying GC freed 572(57KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 1681KB/3363KB, paused 56.199ms total 227.094ms
D/EGL_emulation: eglMakeCurrent: 0xdd183500: ver 2 0 (tinfo 0xdd1b3f00)

如果你知道的话。请帮帮我

提前致谢!

标签: androidbitmapjpegscreenshotmanifest

解决方案


推荐阅读