在Android中,可以使用以下代码来下载图像并将其保存在所需位置:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageDownloader extends AsyncTask {
private String savePath;
private OnImageDownloadListener listener;
public interface OnImageDownloadListener {
void onImageDownloaded(Bitmap bitmap);
void onImageDownloadError(String error);
}
public ImageDownloader(String savePath, OnImageDownloadListener listener) {
this.savePath = savePath;
this.listener = listener;
}
@Override
protected Bitmap doInBackground(String... params) {
String imageUrl = params[0];
Bitmap bitmap = null;
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
File dir = new File(savePath);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, "image.jpg");
FileOutputStream outputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
listener.onImageDownloadError(e.getMessage());
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
listener.onImageDownloaded(bitmap);
}
}
}
使用方法如下:
String imageUrl = "https://example.com/image.jpg";
String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/Images/";
ImageDownloader imageDownloader = new ImageDownloader(savePath, new ImageDownloader.OnImageDownloadListener() {
@Override
public void onImageDownloaded(Bitmap bitmap) {
// 下载成功,可以在这里处理下载后的图像
}
@Override
public void onImageDownloadError(String error) {
// 下载失败,可以在这里处理错误
}
});
imageDownloader.execute(imageUrl);
需要注意的是,由于Android 6.0及更高版本的权限限制,下载图像时可能需要动态请求存储权限。在使用此代码之前,请确保已经在AndroidManifest.xml中声明了适当的权限。