




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片
這篇文章給大家介紹怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。具體內(nèi)容如下最近發(fā)現(xiàn)在webView的setOnLongClickListener中可以獲取到WebView.HitTestResult,根據(jù)獲取的HitTestResult的Type來(lái)判斷做不同的處理。通過(guò)判斷Type的類型獲取點(diǎn)擊圖片的url,然后把圖片下載到本地,發(fā)送廣播通知系統(tǒng)圖庫(kù)進(jìn)行更新,在系統(tǒng)圖庫(kù)中查看下載的圖片。運(yùn)行Demo在網(wǎng)頁(yè)中對(duì)圖片做長(zhǎng)按點(diǎn)擊即可下載網(wǎng)絡(luò)圖片直接上代碼:下面附有Demo下載:點(diǎn)擊打開(kāi)鏈接package
demo.sam.webview_demo;
import
android.app.Activity;
import
android.app.Dialog;
import
android.content.Context;
import
android.content.DialogInterface;
import
android.content.Intent;
import
.Uri;
import
android.os.Handler;
import
android.os.Message;
import
vider.MediaStore;
import
android.support.v7.app.AlertDialog;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.text.Editable;
import
android.util.Log;
import
android.view.KeyEvent;
import
android.view.View;
import
android.webkit.WebChromeClient;
import
android.webkit.WebResourceRequest;
import
android.webkit.WebSettings;
import
android.webkit.WebView;
import
android.webkit.WebViewClient;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.ProgressBar;
import
android.widget.Toast;
import
java.io.FileNotFoundException;
public
class
MainActivity
extends
Activity
{
private
ProgressBar
progress;
private
WebView
webView;
private
EditText
editText;
private
Button
click;
private
Context
context;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=
this;
initView();
initData();
initListener();
}
private
void
initData()
{
WebSettings
settings
=
webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setUseWideViewPort(true);//設(shè)置此屬性,可任意比例縮放
settings.setLoadWithOverviewMode(true);
//
使頁(yè)面支持縮放
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);
//支持自動(dòng)加載圖片
settings.setLoadsImagesAutomatically(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);//
排版適應(yīng)屏幕
//
縮放按鈕
settings.setDisplayZoomControls(false);
webView.setWebViewClient(new
WebViewClient(){
//
頁(yè)面在當(dāng)前頁(yè)面跳轉(zhuǎn)
@Override
public
boolean
shouldOverrideUrlLoading(WebView
view,
WebResourceRequest
request)
{
return
super.shouldOverrideUrlLoading(view,
request);
}
//
頁(yè)面加載結(jié)束
@Override
public
void
onPageFinished(WebView
view,
String
url)
{
super.onPageFinished(view,
url);
if(progress!=null){
progress.setVisibility(View.GONE);
}
}
});
}
private
void
initView()
{
progress
=
(ProgressBar)
findViewById(R.gress);
webView
=
(WebView)
findViewById(R.id.webView);
editText
=
(EditText)
findViewById(R.id.url);
click
=
(Button)
findViewById(R.id.click);
}
private
void
initListener()
{
//
網(wǎng)頁(yè)加載進(jìn)度顯示
webView.setWebChromeClient(new
WebChromeClient(){
@Override
public
void
onProgressChanged(WebView
view,
int
newProgress)
{
super.onProgressChanged(view,
newProgress);
progress.setVisibility(View.VISIBLE);
progress.setProgress(newProgress);
}
});
click.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
view)
{
Log.e("輸入的網(wǎng)站",editText.getText().toString().trim());
webView.loadUrl(editText.getText().toString().trim());
}
});
//
長(zhǎng)按點(diǎn)擊事件
webView.setOnLongClickListener(new
View.OnLongClickListener()
{
@Override
public
boolean
onLongClick(View
view)
{
final
WebView.HitTestResult
hitTestResult
=
webView.getHitTestResult();
//
如果是圖片類型或者是帶有圖片鏈接的類型
if(hitTestResult.getType()==
WebView.HitTestResult.IMAGE_TYPE||
hitTestResult.getType()==
WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE){
//
彈出保存圖片的對(duì)話框
AlertDialog.Builder
builder
=
new
AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage("保存圖片到本地");
builder.setPositiveButton("確認(rèn)",
new
DialogInterface.OnClickListener()
{
@Override
public
void
onClick(DialogInterface
dialogInterface,
int
i)
{
String
url
=
hitTestResult.getExtra();
//
下載圖片到本地
DownPicUtil.downPic(url,
new
DownPicUtil.DownFinishListener(){
@Override
public
void
getDownPath(String
s)
{
Toast.makeText(context,"下載完成",Toast.LENGTH_LONG).show();
Message
msg
=
Message.obtain();
msg.obj=s;
handler.sendMessage(msg);
}
});
}
});
builder.setNegativeButton("取消",
new
DialogInterface.OnClickListener()
{
//
自動(dòng)dismiss
@Override
public
void
onClick(DialogInterface
dialogInterface,
int
i)
{
}
});
AlertDialog
dialog
=
builder.create();
dialog.show();
}
return
true;
}
});
webView.loadUrl("");
}
Handler
handler
=new
Handler(){
@Override
public
void
handleMessage(Message
msg)
{
super.handleMessage(msg);
String
picFile
=
(String)
msg.obj;
String[]
split
=
picFile.split("/");
String
fileName
=
split[split.length-1];
try
{
MediaStore.Images.Media.insertImage(getApplicationContext().getContentResolver(),
picFile,
fileName,
null);
}
catch
(FileNotFoundException
e)
{
e.printStackTrace();
}
//
最后通知圖庫(kù)更新
getApplicationContext().sendBroadcast(new
Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.parse("file://"
+
picFile)));
Toast.makeText(context,"圖片保存圖庫(kù)成功",Toast.LENGTH_LONG).show();
}
};
//
監(jiān)聽(tīng)返回鍵返回網(wǎng)頁(yè)的上一層
@Override
public
boolean
onKeyDown(int
keyCode,
KeyEvent
event)
{
if(keyCode
==
KeyEvent.KEYCODE_BACK
&&
webView.canGoBack()){
if(webView
!=
null){
webView.goBack();
return
true;
}
}
return
super.onKeyDown(keyCode,
event);
}
}圖片下載的工具類import
android.os.AsyncTask;
import
android.os.Environment;
import
android.util.Log;
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
import
.URL;
import
java.util.Random;
/**
*
圖片下載的工具類
*/
public
class
DownPicUtil
{
/**
*下載圖片,返回圖片的地址
*
@param
url
*/
public
static
void
downPic(String
url,DownFinishListener
downFinishListener){
//
獲取存儲(chǔ)卡的目錄
String
filePath
=
Environment.getExternalStorageDirectory().getPath();
File
file
=
new
File(filePath+File.separator+"webViewCache");
if(!file.exists()){
file.mkdir();
}
loadPic(file.getPath(),url,downFinishListener);
}
private
static
void
loadPic(final
String
filePath,
final
String
url,
final
DownFinishListener
downFinishListener)
{
Log.e("下載圖片的url",url);
new
AsyncTask<Void,Void,String>(){
String
fileName;
InputStream
is;
OutputStream
out;
@Override
protected
String
doInBackground(Void...
voids)
{
//
下載文件的名稱
String[]
split
=
url.split("/");
String
newString
=
split[split.length
-
1];
fileName
=newString.substring(newString.length()-20,newString.length()-1)
;
//
創(chuàng)建目標(biāo)文件,不是文件夾
File
picFile
=
new
File(filePath
+
File.separator
+
fileName);
if(picFile.exists()){
return
picFile.getPath();
}
try
{
URL
picUrl
=
new
URL(url);
//通過(guò)圖片的鏈接打開(kāi)輸入流
is
=
picUrl.openStream();
if(is==null){
return
null;
}
ou
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線客服即時(shí)響應(yīng)用戶咨詢
- 鮮活魚類買賣合同
- 上海松江汽車租賃合同
- 企業(yè)法律合規(guī)培訓(xùn)課程指南
- 吊籃軌道拆除施工方案
- 農(nóng)業(yè)產(chǎn)業(yè)鏈質(zhì)量監(jiān)督作業(yè)指導(dǎo)書
- 主要建筑材料介紹
- 設(shè)備吊裝專項(xiàng)施工方案
- 路燈改造施工方案
- 俱樂(lè)部場(chǎng)地租賃合同
- 溫庭筠《望江南》ppt課件
- 口腔正畸學(xué)單詞
- 公共場(chǎng)所健康證體檢表
- 普通高等學(xué)校獨(dú)立學(xué)院教育工作合格評(píng)估指標(biāo)體系(第六稿)
- 內(nèi)襯修復(fù)用HTPO管材企標(biāo)
- 部編教材一年級(jí)下冊(cè)生字筆順筆畫
- 多維閱讀第13級(jí)—A Stolen Baby 小猩猩被偷走了
- 二維火收銀使用手冊(cè)
- 2018版公路工程質(zhì)量檢驗(yàn)評(píng)定標(biāo)準(zhǔn)分項(xiàng)工程質(zhì)量檢驗(yàn)評(píng)定表交通安全設(shè)施
- EN12680.3中文
- 歐科模塊化風(fēng)冷冷水熱泵機(jī)組報(bào)警代碼和維修步驟
評(píng)論
0/150
提交評(píng)論