Android 는 WebView 를 사용 하여 파일 다운로드 기능 을 실현 합 니 다.

본 논문 의 사례 는 WebView 가 파일 다운로드 기능 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
이 절 머리말
이 절 은 WebView 에서 파일 을 다운로드 하 는 지식 을 소개 합 니 다.저희 가 일반 브 라 우 저 를 사용 할 때,예 를 들 어 UC,다운로드 가능 한 링크 를 클릭 하면 다운 로드 를 합 니 다.WebView 는 브 라 우 저 와 같은 구성 요소 로 서 다운 로드 를 지원 합 니 다.저 희 는 다운로드 절 차 를 직접 작성 하고 다운로드 한 파일 을 어디 에 두 는 지 설정 할 수 있 습 니 다.어떤 파일 이름 으로 저장 하 는 지,물론 다른 내 장 된 브 라 우 저 를 사용 하여 다운로드 할 수 있 습 니 다.예 를 들 어 Chrome,UC 등!다음은 사용법 을 보 여 드 리 겠 습 니 다!
1.다른 브 라 우 저 로 파일 다운로드:
이것 은 매우 간단 합 니 다.우 리 는 WebView 에 setDownloadListener 를 설정 한 다음 에 DownloadListener 의 onDownloadStart 를 다시 쓰 고 그 안에 Intent 를 쓰 고 startActivity 에 대응 하 는 Activity 를 쓰 면 됩 니 다!
키 코드 는 다음 과 같 습 니 다:

wView.setDownloadListener(new DownloadListener(){
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, 
 String mimetype, long contentLength) {
  Log.e("HEHE","    ");
  Uri uri = Uri.parse(url);
  Intent intent = new Intent(Intent.ACTION_VIEW,uri);
  startActivity(intent);
 }
});
휴대 전화 에 여러 개의 브 라 우 저 가 존재 한다 면 하나의 브 라 우 저 를 선택 하여 다운로드 할 수 있 도록 대화 상 자 를 엽 니 다~
2.스 레 드 로 파일 다운로드
물론 다운로드 파일 을 기본 경로 에 두 고 싶 지 않 거나 파일 이름 을 정의 하고 싶 지 않 을 수도 있 습 니 다.직접 스 레 드 를 써 서 파일 을 다운로드 할 수 있 습 니 다.예제 코드 는 다음 과 같 습 니 다.
핵심 코드:
우 리 는 다운로드 한 스 레 드 종 류 를 따로 씁 니 다.
DownLoadThread.java

/**
 * Created by Jay on 2015/9/14 0014.
 */
public class DownLoadThread implements Runnable {

 private String dlUrl;

 public DownLoadThread(String dlUrl) {
  this.dlUrl = dlUrl;
 }

 @Override
 public void run() {
  Log.e("HEHE", "    ~~~~~");
  InputStream in = null;
  FileOutputStream fout = null;
  try {
   URL httpUrl = new URL(dlUrl);
   HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
   conn.setDoInput(true);
   conn.setDoOutput(true);
   in = conn.getInputStream();
   File downloadFile, sdFile;
   if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    Log.e("HEHE","SD   ");
    downloadFile = Environment.getExternalStorageDirectory();
    sdFile = new File(downloadFile, "csdn_client.apk");
    fout = new FileOutputStream(sdFile);
   }else{
    Log.e("HEHE","SD          ");
   }
   byte[] buffer = new byte[1024];
   int len;
   while ((len = in.read(buffer)) != -1) {
    fout.write(buffer, 0, len);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (in != null) {
    try {
     in.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (fout != null) {
    try {
     fout.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
  Log.e("HEHE", "    ~~~~");
 }
}
그리고 MainActivity.java 에서 이 라인 을 만 들 고 시작 합 니 다:

wView.setDownloadListener(new DownloadListener(){
 @Override
 public void onDownloadStart(String url, String userAgent, String contentDisposition, 
 String mimetype, long contentLength) {
   Log.e("HEHE","onDownloadStart   :    :" + url);
   new Thread(new DownLoadThread(url)).start();
 }
});
실행 결과:

우 리 는 SD 카드 를 열 면 다운로드 한 파일 이 SD 카드 에 조용히 누 워 있 는 것 을 볼 수 있다.

주의사항:
알 겠 습 니 다.또한 SD 카드 를 쓰 는 읽 기와 쓰기 권한 과 인터넷 액세스 권한 을 잊 지 마 세 요.

<uses-permission android:name="android.permission.INTERNET"/>
<!--  SDCard           -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--  SDCard       -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
그리고,in=conn.getInputStream();conn 이 모든 것 을 설정 한 뒤에 써 야 합 니 다!!명심 해라,그렇지 않 으 면 아무것도 읽 을 수 없다!
이 절의 소결:
이 절 은 매우 간단 합 니 다.코드 는 붙 이지 않 습 니 다.사실은 set DownloadListener 라 는 게임 입 니 다.직접 on DownloadStart 방법 을 다시 써 서 다운로드 과정 을 처리 할 뿐 입 니 다.이 절 은 여기까지 입 니 다.감사합니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기