Android使用webView长按保存下载网络图片
本文实例为大家分享了Android使用webView长按保存下载网络图片的具体代码,供大家参考,具体内容如下
最近发现在webView的setOnLongClickListener中可以获取到WebView.HitTestResult,根据获取的HitTestResult的Type来判断做不同的处理。通过判断Type的类型获取点击图片的url,然后把图片下载到本地,发送广播通知系统图库进行更新,在系统图库中查看下载的图片。运行Demo在网页中对图片做长按点击即可下载网络图片
直接上代码:
下面附有Demo下载:点击打开链接
packagedemo.sam.webview_demo; importandroid.app.Activity; importandroid.app.Dialog; importandroid.content.Context; importandroid.content.DialogInterface; importandroid.content.Intent; importandroid.net.Uri; importandroid.os.Handler; importandroid.os.Message; importandroid.provider.MediaStore; importandroid.support.v7.app.AlertDialog; importandroid.support.v7.app.AppCompatActivity; importandroid.os.Bundle; importandroid.text.Editable; importandroid.util.Log; importandroid.view.KeyEvent; importandroid.view.View; importandroid.webkit.WebChromeClient; importandroid.webkit.WebResourceRequest; importandroid.webkit.WebSettings; importandroid.webkit.WebView; importandroid.webkit.WebViewClient; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.ProgressBar; importandroid.widget.Toast; importjava.io.FileNotFoundException; publicclassMainActivityextendsActivity{ privateProgressBarprogress; privateWebViewwebView; privateEditTexteditText; privateButtonclick; privateContextcontext; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context=this; initView(); initData(); initListener(); } privatevoidinitData(){ WebSettingssettings=webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true);//设置此属性,可任意比例缩放 settings.setLoadWithOverviewMode(true); //使页面支持缩放 settings.setBuiltInZoomControls(true); settings.setSupportZoom(true); //支持自动加载图片 settings.setLoadsImagesAutomatically(true); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);//排版适应屏幕 //缩放按钮 settings.setDisplayZoomControls(false); webView.setWebViewClient(newWebViewClient(){ //页面在当前页面跳转 @Override publicbooleanshouldOverrideUrlLoading(WebViewview,WebResourceRequestrequest){ returnsuper.shouldOverrideUrlLoading(view,request); } //页面加载结束 @Override publicvoidonPageFinished(WebViewview,Stringurl){ super.onPageFinished(view,url); if(progress!=null){ progress.setVisibility(View.GONE); } } }); } privatevoidinitView(){ progress=(ProgressBar)findViewById(R.id.progress); webView=(WebView)findViewById(R.id.webView); editText=(EditText)findViewById(R.id.url); click=(Button)findViewById(R.id.click); } privatevoidinitListener(){ //网页加载进度显示 webView.setWebChromeClient(newWebChromeClient(){ @Override publicvoidonProgressChanged(WebViewview,intnewProgress){ super.onProgressChanged(view,newProgress); progress.setVisibility(View.VISIBLE); progress.setProgress(newProgress); } }); click.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewview){ Log.e("输入的网站",editText.getText().toString().trim()); webView.loadUrl(editText.getText().toString().trim()); } }); //长按点击事件 webView.setOnLongClickListener(newView.OnLongClickListener(){ @Override publicbooleanonLongClick(Viewview){ finalWebView.HitTestResulthitTestResult=webView.getHitTestResult(); //如果是图片类型或者是带有图片链接的类型 if(hitTestResult.getType()==WebView.HitTestResult.IMAGE_TYPE|| hitTestResult.getType()==WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE){ //弹出保存图片的对话框 AlertDialog.Builderbuilder=newAlertDialog.Builder(context); builder.setTitle("提示"); builder.setMessage("保存图片到本地"); builder.setPositiveButton("确认",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialogInterface,inti){ Stringurl=hitTestResult.getExtra(); //下载图片到本地 DownPicUtil.downPic(url,newDownPicUtil.DownFinishListener(){ @Override publicvoidgetDownPath(Strings){ Toast.makeText(context,"下载完成",Toast.LENGTH_LONG).show(); Messagemsg=Message.obtain(); msg.obj=s; handler.sendMessage(msg); } }); } }); builder.setNegativeButton("取消",newDialogInterface.OnClickListener(){ //自动dismiss @Override publicvoidonClick(DialogInterfacedialogInterface,inti){ } }); AlertDialogdialog=builder.create(); dialog.show(); } returntrue; } }); webView.loadUrl("http://www.baidu.com"); } Handlerhandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ super.handleMessage(msg); StringpicFile=(String)msg.obj; String[]split=picFile.split("/"); StringfileName=split[split.length-1]; try{ MediaStore.Images.Media.insertImage(getApplicationContext().getContentResolver(),picFile,fileName,null); }catch(FileNotFoundExceptione){ e.printStackTrace(); } //最后通知图库更新 getApplicationContext().sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+picFile))); Toast.makeText(context,"图片保存图库成功",Toast.LENGTH_LONG).show(); } }; //监听返回键返回网页的上一层 @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){ if(webView!=null){ webView.goBack(); returntrue; } } returnsuper.onKeyDown(keyCode,event); } }
图片下载的工具类
importandroid.os.AsyncTask; importandroid.os.Environment; importandroid.util.Log; importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importjava.net.URL; importjava.util.Random; /** *图片下载的工具类 */ publicclassDownPicUtil{ /** *下载图片,返回图片的地址 *@paramurl */ publicstaticvoiddownPic(Stringurl,DownFinishListenerdownFinishListener){ //获取存储卡的目录 StringfilePath=Environment.getExternalStorageDirectory().getPath(); Filefile=newFile(filePath+File.separator+"webViewCache"); if(!file.exists()){ file.mkdir(); } loadPic(file.getPath(),url,downFinishListener); } privatestaticvoidloadPic(finalStringfilePath,finalStringurl,finalDownFinishListenerdownFinishListener){ Log.e("下载图片的url",url); newAsyncTask(){ StringfileName; InputStreamis; OutputStreamout; @Override protectedStringdoInBackground(Void...voids){ //下载文件的名称 String[]split=url.split("/"); StringnewString=split[split.length-1]; fileName=newString.substring(newString.length()-20,newString.length()-1); //创建目标文件,不是文件夹 FilepicFile=newFile(filePath+File.separator+fileName); if(picFile.exists()){ returnpicFile.getPath(); } try{ URLpicUrl=newURL(url); //通过图片的链接打开输入流 is=picUrl.openStream(); if(is==null){ returnnull; } out=newFileOutputStream(picFile); byte[]b=newbyte[1024]; intend; while((end=is.read(b))!=-1){ out.write(b,0,end); } Log.e("OK??","----------"); if(is!=null){ is.close(); } if(out!=null){ out.close(); } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } returnpicFile.getPath(); } @Override protectedvoidonPostExecute(Strings){ super.onPostExecute(s); if(s!=null){ downFinishListener.getDownPath(s); } } }.execute(); } //下载完成回调的接口 publicinterfaceDownFinishListener{ voidgetDownPath(Strings); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。