[掌眼]Android WebView Long Press长按保存图片到手机

具体效果可见“掌眼”掌拍古玩江湖:http://bbs.guwanch.com

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);

        }

    }

 具体效果可下载APP测试:                                             或关注微信公众号:                     

扫码测试                   

你可能感兴趣的:(android)