<span style="font-size:18px;">首先要先注册长按监听菜单

private String imgurl = "";

    /***
* 功能:长按图片保存到手机
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
if (item.getTitle() == "保存到手机") {
new SaveImage().execute(); // Android 4.0以后要使用线程来访问网络
} else {
return false;
}
return true;
}
};
if (v instanceof WebView) {
WebView.HitTestResult result = ((WebView) v).getHitTestResult();
if (result != null) {
int type = result.getType();
if (type == WebView.HitTestResult.IMAGE_TYPE || type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
imgurl = result.getExtra();
menu.setHeaderTitle("提示");
menu.add(0, v.getId(), 0, "保存到手机").setOnMenuItemClickListener(handler);
}
}
}
} /***
* 功能:用线程保存图片
*
* @author wangyp
*
*/
private class SaveImage extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String result = "";
try {
String sdcard = Environment.getExternalStorageDirectory().toString();
File file = new File(sdcard + "/Download");
if (!file.exists()) {
file.mkdirs();
}
int idx = imgurl.lastIndexOf(".");
String ext = imgurl.substring(idx);
file = new File(sdcard + "/Download/" + new Date().getTime() + ext);
InputStream inputStream = null;
URL url = new URL(imgurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(20000);
if (conn.getResponseCode() == 200) {
inputStream = conn.getInputStream();
}
byte[] buffer = new byte[4096];
int len = 0;
FileOutputStream outStream = new FileOutputStream(file);
while ((len = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
result = "图片已保存至:" + file.getAbsolutePath();
} catch (Exception e) {
result = "保存失败!" + e.getLocalizedMessage();
}
return result;
} @Override
protected void onPostExecute(String result) {
MsgBox("提示", result);
}
}</span>

最新文章

  1. .net 分布式架构之分布式缓存中间件
  2. UV动画
  3. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)
  4. 代理IP收集
  5. Code First03---CodeFirst根据配置同步到数据库的三种方式
  6. haskell io模块
  7. RouterOS DNS劫持 -- A记录
  8. oracle线程数更改
  9. Nutch 教程
  10. CSS布局中——导航是非常常见的
  11. oracle 问题若干 提醒注意
  12. List是线程安全的吗?如果不是该怎么办呢?安全的List对性能的影响有多大呢?
  13. 开源项目之Android 结束篇
  14. 一、MongoDB安装及启动
  15. SpringBean基础装配
  16. canvas填充样式
  17. 【python 3】 函数 初识
  18. filter中的DelegatingFilterProxy使用事例
  19. Http的Get和Post--扫盲篇
  20. Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航

热门文章

  1. 【Flex学习】Flex4学习网站
  2. 更改AD查询LDAP条目的1000限制
  3. QueryRunner的API
  4. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)
  5. Perl 模块 Getopt::Std 和 Getopt::Long
  6. C# 理解lock
  7. ERP_基于Oracle ADF的定制化企业级IT系统解决方案
  8. PLSQL_性能优化系列12_Oracle Index Anaylsis索引分析
  9. OAF_EO系列3 - Initialize详解和实现(案例)
  10. PKU 2406 Power Strings(KMP最长循环不重叠字串)