android 保存网络图片到相册
时间: 2023-05-12 17:01:54 浏览: 232
Android平台上,我们可以通过代码来实现将网络图片保存到本地相册的功能。具体实现过程如下:
1. 获取需要下载的图片链接。
2. 创建一个异步任务,利用HTTPURLConnection或者OKHttp框架下载图片。
3. 下载完成后,将图片转换成Bitmap对象。
4. 申请写入文件的权限,并判断SD卡是否可用。
5. 使用File对象创建一个图片文件。
6. 利用FileOutputStream将Bitmap对象写入图片文件中。
7. 刷新相册,确保新添加的图片能够被相册所识别。
至此,保存网络图片到相册的功能已经完成。
以下是实现代码:
```java
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
String url = urls[0];
Bitmap bitmap = null;
try {
URL imageURL = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageURL.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
protected void onPostExecute(Bitmap result) {
if (result != null) {
// 申请写入文件的权限
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return;
}
// 判断sd卡是否可用
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 创建图片文件
File imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "image_test.jpg");
try {
// 将Bitmap对象写入图片文件中
FileOutputStream outputStream = new FileOutputStream(imageFile);
result.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); // 100表示压缩率,即不压缩
outputStream.flush();
outputStream.close();
// 刷新相册以便查看新添加的图片
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(imageFile);
intent.setData(uri);
MainActivity.this.sendBroadcast(intent);
Toast.makeText(MainActivity.this, "图片已保存到相册", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "sd卡不可用", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
}
}
}
```
在使用时,只需创建一个DownloadImageTask对象,调用execute方法即可:
```java
DownloadImageTask downloadImageTask = new DownloadImageTask();
downloadImageTask.execute("http://www.example.com/image.jpg");
```
阅读全文