下载网络资源用到的知识点,除了网络资源访问,
还需要用到文件操作的知识,比如判断文件是否存在、创建目录、创建文件等等。
还有动态获取Android6.0以上的权限
1.首先建立一个Activity,布置其xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context="com.test.project.netconnection.NetResActivity">
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="下载"
android:id="@+id/down_btn"
/>
<ImageView
android:id="@+id/Load_img"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
2.布置Activity.java代码:
注意:首先要在Manifest里添加获取读取手机权限和网络权限语句
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
Android6.0以上需在build.gradle里添加:
compile 'com.master.android:permissionhelper:1.3'
在这里使用PermissionHelper方法动态获取权限
package com.test.project.netconnection;
import android.Manifest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.master.permissionhelper.PermissionHelper;
public class NetResActivity extends AppCompatActivity {
private Button button;
private PermissionHelper permissionHelper;
private String TAG = "HelloActivity";
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net_res);
BindId();
permissionHelper = new PermissionHelper(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
permissionHelper.request(new PermissionHelper.PermissionCallback() {
@Override
public void onPermissionGranted() {
Log.e(TAG, "onPermissionGranted...");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.down_btn:
DownloadTask downloadTask = new DownloadTask(imageView, NetResActivity.this, button);
downloadTask.execute("http://p0.so.qhimgs1.com/bdr/_240_/t014003cd65d893cb2c.jpg", "homeng2.jpg");
break;
}
}
});
}
@Override
public void onIndividualPermissionGranted(String[] grantedPermission) {
Log.e(TAG, "onIndividualPermissionGranted() called with: grantedPermission = [" + TextUtils.join(",", grantedPermission) + "]");
}
@Override
public void onPermissionDenied() {
Log.e(TAG, "onPermissionDenied...");
}
@Override
public void onPermissionDeniedBySystem() {
Log.e(TAG, "onPermissionDeniedBySystem...");
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (permissionHelper != null) {
permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void BindId() {
button = findViewById(R.id.down_btn);
imageView = findViewById(R.id.Load_img);
}
}
3.布置DownLoadTask的代码:
package com.test.project.netconnection;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.AndroidException;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
*/
public class DownloadTask extends AsyncTask<String,Integer,Integer> {
private String fileName;
private String rootPath="";
private Context context;
private Button btn;
private ImageView imageView;
private String path="";
public DownloadTask(ImageView mimageView,Context context,Button downloadBtn){
this.imageView=mimageView;
this.context=context;
this.btn=downloadBtn;
this.rootPath = Environment.getExternalStorageDirectory() + "/";
this.path=this.rootPath+"download_pic/";
System.out.println(""+path);
}
@Override
protected Integer doInBackground(String... strings) {
InputStream inputStream=null;
OutputStream outputStream=null;
File file = null;
fileName=path+strings[1];
if (isFileExists(fileName)){
return -1;
}
try {
URL url=new URL(strings[0]);
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
inputStream=httpURLConnection.getInputStream();
createDir(path);
file=createFile(fileName);
outputStream=new FileOutputStream(file);
byte[] buffer=new byte[4*1024];
int length=0;
while ((length=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,length);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return 1;
}
/**
* 工具方法——判断文件已存在
*
* @return
*/
private boolean isFileExists(String sDpath) {
File file = new File(sDpath);
if (file.exists()) {
return true;
}
return false;
}
/**
* 工具方法——创建目录
*/
private boolean createDir(String dirName) {
File file = new File(dirName);
boolean isCreateDir = file.mkdir();
return isCreateDir;
}
/**
* 工具方法——创建文件
* @param
*/
private File createFile(String Filename) {
File file = new File(Filename);
boolean isCreateFile = false;
try {
isCreateFile = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
switch (integer){
case -1:
Toast.makeText(context,"文件已存在",Toast.LENGTH_SHORT).show();
break;
case 1:
Bitmap bt=BitmapFactory.decodeFile(fileName);
imageView.setImageBitmap(bt);
Toast.makeText(context,"文件下载完成",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
效果图:
