android - 如何在 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)
如果你知道的话。请帮帮我
提前致谢!
解决方案
推荐阅读
- spring-boot - 环境变量始终为空。科特林春天
- delphi - 从通过 Indy 检索的页面源获取 HTML 表单中的默认表单值的最简单方法是什么?
- css - 属性选择器的 Sass @each 循环
- android - CircleCI 中的单元测试因 org.gradle.internal.exceptions.LocationAwareException 而失败
- dart - 在 TextInputType 更改后控制器重置的 Flutter TextField
- python - 如何在python中沿曲线注释文本并旋转线条?
- kentico - Kentico - 网络分析仪表板不断刷新
- rabbitmq - RabbitMQ 服务器正在下降
- c# - WIMMountImageHandle 导致 ERROR_INVALID_HANDLE
- rxjs - 使用 angular5/rxjs 刷新下拉内容