X5WebView的长按保存图片

Android基于腾讯的x5WebView的浏览页面,长按保存图片

/**
* 响应长按点击事件
* @param
*/
private void setWebImageLongClickListener() {
WebView.HitTestResult result = mX5WebView.getHitTestResult();
if (result != null) {
int type = result.getType();
if (type == WebView.HitTestResult.IMAGE_TYPE || type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
String longClickUrl = result.getExtra();
showDialog(longClickUrl);
}
}
}

/**
* 长按 WebView 图片弹出 Dialog
* @param url
*/
private void showDialog(final String url) {
new ActionSheetDialog(BaseWebViewActivity.this)
.builder()
.setCancelable(true)
.setCanceledOnTouchOutside(true)
.addSheetItem(
"保存到相册",
ActionSheetDialog.SheetItemColor.Blue,
new ActionSheetDialog.OnSheetItemClickListener() {
@Override
public void onClick(int which) {
String fileName = System.currentTimeMillis() + ".jpg";
savePicture(fileName,url);
}
}).show();
}

//Glide保存图片
public void savePicture(final String fileName, String url){
Glide.with(BaseWebViewActivity.this).load(url).asBitmap().toBytes().into(new SimpleTarget<byte[]>() {
@Override
public void onResourceReady(byte[] bytes, GlideAnimation<? super byte[]> glideAnimation) {
try {
savaFileToSD(fileName,bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//往SD卡写入文件的方法
public void savaFileToSD(String filename, byte[] bytes) throws Exception {
//如果手机已插入sd卡,且app具有读写sd卡的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String filePath = Environment.getExternalStorageDirectory().getCanonicalPath()+"/Test";
File dir1 = new File(filePath);
if (!dir1.exists()){
dir1.mkdirs();
}
String filename1 = filePath+ "/" + filename;
//这里就不要用openFileOutput了,那个是往手机内存中写数据的
FileOutputStream output = new FileOutputStream(filename1);
output.write(bytes);
//将bytes写入到输出流中
output.close();
//关闭输出流
Toast.makeText(BaseWebViewActivity.this, "图片已成功保存到"+filePath, Toast.LENGTH_SHORT).show();
// 其次把文件插入到系统图库
// 其次把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(this.getContentResolver(),
filename1, filename, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(filename1))));
} else Toast.makeText(BaseWebViewActivity.this, "SD卡不存在或者不可读写", Toast.LENGTH_SHORT).show();
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,681评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,752评论 2 7
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,797评论 0 1
  • 一、Android Crash说明 程序因未捕获的异常而突然终止, 系统会调用处理程序的接口UncaughtExc...
    Mur阅读 3,092评论 0 6