【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中利用webView實(shí)現(xiàn)長(zhǎng)按保存下載網(wǎng)絡(luò)圖片_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論