php h5长按图片实现保存功能,WebView 实现长按保存图片

阅读: 评论:0

php h5长按图片实现保存功能,WebView 实现长按保存图片

php h5长按图片实现保存功能,WebView 实现长按保存图片

最近在做一个红包活动,要求实现长按图片保存到相册以及分享的功能。查询了网上的一些实现后,整理成这篇文章。

主要步骤如下:

WebView添加OnLongClickListener

识别长按的元素类型,如果是图片,弹出AlertDialog

选择保存或是分享图片

代码如下:

webView.setOnLongClickListener(v -> {

final WebView.HitTestResult hitTestResult = HitTestResult();

// 如果是图片类型或者是带有图片链接的类型

if (Type() == WebView.HitTestResult.IMAGE_TYPE ||

// 弹出保存图片的对话框

new AlertDialog.Builder(WebActivity.this)

.setItems(new String[]{"保存图片到本地", "分享图片"}, (dialog, which) -> {

String pic = Extra();//获取图片

switch (which) {

case 0:

//保存图片到相册

new Thread(() -> saveImage(pic)).start();

break;

case 1:

// 分享图片,这里用RxJava处理异步

.subscribeOn(Schedulersputation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(bitmap -> {

try {

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("image/*");

intent.putExtra(Intent.EXTRA_STREAM, getImageUri(WebActivity.this, bitmap));

ateChooser(intent, "分享图片"));

} catch (Exception e) {

e.printStackTrace();

Util.makeText(WebActivity.this, "分享失败");

}

}, throwable -> {

throwable.printStackTrace();

Util.makeText(WebActivity.this, "分享失败");

});

break;

}

})

.show();

return true;

}

return false;//保持长按可以复制文字

});

public void saveImage(String data) {

try {

Bitmap bitmap = webData2bitmap(data);

if (bitmap != null) {

save2Album(bitmap, new SimpleDateFormat("SXS_yyyyMMddHHmmss", Default()).format(new Date()) + ".jpg");

} else {

runOnUiThread(() -> Toast.makeText(WebActivity.this, "保存失败", Toast.LENGTH_SHORT).show());

}

} catch (Exception e) {

runOnUiThread(() -> Toast.makeText(WebActivity.this, "保存失败", Toast.LENGTH_SHORT).show());

e.printStackTrace();

}

}

public Uri getImageUri(Context inContext, Bitmap inImage) {

ByteArrayOutputStream bytes = new ByteArrayOutputStream();

inImagepress(Bitmap.CompressFormat.JPEG, 100, bytes);

String path = MediaStore.Images.Media.ContentResolver(), inImage, "Title", null);

return Uri.parse(path);

}

public Bitmap webData2bitmap(String data) {

byte[] imageBytes = Base64.decode(data.split(",")[1], Base64.DEFAULT);

return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);

}

private void save2Album(Bitmap bitmap, String fileName) {

File file = new ExternalStoragePublicDirectory(DIRECTORY_DCIM), fileName);

FileOutputStream fos = null;

try {

fos = new FileOutputStream(file);

bitmappress(Bitmap.CompressFormat.JPEG, 100, fos);

fos.flush();

fos.close();

runOnUiThread(() -> {

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));

Util.makeText(WebActivity.this, "保存成功", Toast.LENGTH_SHORT);

});

} catch (Exception e) {

runOnUiThread(() -> Util.makeText(WebActivity.this, "保存失败", Toast.LENGTH_SHORT));

e.printStackTrace();

} finally {

try {

fos.close();

} catch (Exception ignored) {

}

}

}

网上别的很多文章中&#Extra()获取到的是图片的Url网址,而我们前端页面获取到的是base64编码后的data字段,需要将data还原成字节数组,再解码成Bitmap才能保存或者分享(data字段带有格式信息,也可直接将解码后的字节数组写入磁盘)。

本文发布于:2024-01-29 07:31:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648469313696.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图片   功能   php   WebView
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23