android - 捕获视图的屏幕截图后如何完成活动?
问题描述
我需要使用子视图的屏幕截图关闭活动。
这是我的代码片段:
private void returnBackWithSavedImage() {
int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
// Hide top/bottom sub views
updateView(View.GONE);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
parentImageRelativeLayout.setLayoutParams(layoutParams);
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
byte[] byteArray = null;
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
if (parentImageRelativeLayout != null) {
parentImageRelativeLayout.setDrawingCacheEnabled(true);
parentImageRelativeLayout.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
byteArray = byteArrayOutputStream .toByteArray();
}
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
} catch (Exception var7) {
var7.printStackTrace();
}
Intent returnIntent = new Intent();
if (byteArray != null) {
String imgString = Base64.encodeToString(byteArray, Base64.NO_WRAP);
returnIntent.putExtra("image", imgString);
}
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}.start();
//Toast.makeText(this, getString(R.string.save_image_succeed), Toast.LENGTH_SHORT).show();
} else {
showPermissionRequest();
}
}
问题是finish();
被调用但活动从未关闭。如果我运行以下代码,它将关闭活动。
private void returnBackWithSavedImage() {
int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK, returnIntent);
finish();
} else {
showPermissionRequest();
}
}
我整天都在努力解决这个问题,但我真的无法解决。
我很感激任何帮助。
非常感谢您在这件事上的时间和帮助。
解决方案
只需将图像捕获过程转移到方法即可解决问题。看起来CountDownTimer
onFinish()
没有在 UI 线程中运行。
因此,将您的代码更改为以下内容:
private void returnBackWithSavedImage() {
int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
...
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
captureImage();
}
}.start();
...
} else {
showPermissionRequest();
}
}
private void captureImage() {
byte[] byteArray = null;
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
if (parentImageRelativeLayout != null) {
parentImageRelativeLayout.setDrawingCacheEnabled(true);
parentImageRelativeLayout.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
byteArray = byteArrayOutputStream .toByteArray();
}
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
} catch (Exception var7) {
var7.printStackTrace();
}
Intent returnIntent = new Intent();
if (byteArray != null) {
String imgString = Base64.encodeToString(byteArray, Base64.NO_WRAP);
returnIntent.putExtra("image", imgString);
}
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
推荐阅读
- git - 我可以使用本地 ssh 密钥对 github 进行身份验证,但仍然会出现烦人的 github 弹出窗口以请求登录用户,通过
- python - 初学者 Python - 在 true if 语句之后期望用户输入
- swift - 在 SwiftUI 中观察 PassthroughSubject 中的错误
- ios - 错误域 = NSPOSIXErrorDomain 代码 = 2“没有这样的文件或目录”
- javascript - CSS & JS 没有正确加载
- api - python 3.7 无法访问谷歌秘密服务管理器
- node.js - 在 Node.JS 上安装依赖项时出错
- python - json.dumps 中的额外 &/ampersand 与 python 请求包 GET 请求
- sed - SED - 更改行中的字符串,仅当该行以
- javascript - 如何测试 fs.read 函数回调