Android 中如何将图片下载到 SD 卡

在 Android 开发中,有时候我们需要从网络上下载图片到设备的 SD 卡中,以便在应用中展示或者做其他处理。本文将介绍如何在 Android 中实现这一功能,并附上代码示例。

使用网络请求库下载图片

在 Android 中,我们通常会使用网络请求库来进行网络请求操作。其中比较常用的网络请求库有 OkHttp、Retrofit 等。这里以 OkHttp 为例来演示如何下载图片到 SD 卡。

步骤一:添加依赖

首先,在项目的 build.gradle 文件中添加 OkHttp 的依赖:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

步骤二:编写下载图片的方法

接下来,我们编写一个方法,用来下载图片到 SD 卡中。代码如下:

public void downloadImage(String url, String filePath) {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url(url)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if (!response.isSuccessful()) {
                throw new IOException("Failed to download image: " + response);
            }

            try (ResponseBody body = response.body()) {
                InputStream inputStream = body.byteStream();
                OutputStream outputStream = new FileOutputStream(filePath);

                byte[] buffer = new byte[8192];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }

                outputStream.flush();
            }
        }
    });
}

步骤三:调用下载图片的方法

最后,在需要下载图片的地方调用上面编写的方法即可:

String imageUrl = "
String filePath = Environment.getExternalStorageDirectory().getPath() + "/image.jpg";

downloadImage(imageUrl, filePath);

通过以上步骤,我们就可以实现将网络上的图片下载到设备的 SD 卡中。这样,我们就可以在应用中使用这张图片了。

序列图

下面是一个下载图片到 SD 卡的序列图,展示了上面代码的执行流程:

sequenceDiagram
    participant App
    participant OkHttpClient
    participant Server

    App->>OkHttpClient: downloadImage(url, filePath)
    OkHttpClient->>Server: Send request
    Server->>OkHttpClient: Send response
    OkHttpClient->>App: Receive response
    App->>SD Card: Save image

总结

在 Android 开发中,将图片下载到 SD 卡是一个常见的需求。通过使用网络请求库,我们可以很容易地实现这一功能。在实际开发中,我们可以根据具体需求对图片下载的过程进行定制化的处理。希望本文对你有所帮助,谢谢阅读!