Android 9.0 保存图片到相册
在Android 9.0及以上版本中,保存图片到相册是一项常见的需求。本篇文章将介绍如何使用Android 9.0的API来实现保存图片到相册的功能,并提供代码示例。
保存图片到相册的步骤
保存图片到相册的主要步骤如下:
- 检查权限:在Android 9.0及以上版本中,保存图片到相册需要WRITE_EXTERNAL_STORAGE权限。
- 创建保存路径:在保存图片之前,需要先创建保存路径。
- 保存图片:使用FileOutputStream将图片保存到指定路径。
- 刷新相册:为了让相册能够及时地显示新保存的图片,需要发送广播通知相册刷新。
下面我们来逐步实现这些步骤。
检查权限
在AndroidManifest.xml文件中添加以下权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
然后在代码中检查权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 权限未被授予,需要请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
} else {
// 权限已被授予,可以进行保存操作
saveImageToGallery();
}
当权限未被授予时,我们需要请求权限。在请求权限的回调方法中,我们可以根据用户的选择来进行保存操作。
创建保存路径
在保存图片之前,我们需要先创建保存路径。这里我们将保存路径设置为"sdcard/DCIM/Camera"目录下的一个新文件。
File storageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM), "Camera");
// 创建保存路径
if (!storageDir.exists()) {
storageDir.mkdir();
}
// 创建新的文件
File imageFile = new File(storageDir, "image.jpg");
保存图片
使用FileOutputStream将图片保存到指定路径:
try {
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
Toast.makeText(this, "图片保存成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "图片保存失败", Toast.LENGTH_SHORT).show();
}
刷新相册
为了让相册能够及时地显示新保存的图片,需要发送广播通知相册刷新。
MediaScannerConnection.scanFile(this,
new String[]{imageFile.getAbsolutePath()},
new String[]{"image/jpeg"},
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
// 相册刷新完成后的回调
}
});
完整代码示例
下面是一个完整的代码示例:
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 权限未被授予,需要请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
} else {
// 权限已被授予,可以进行保存操作
saveImageToGallery();
}
}
private void saveImageToGallery() {
Bitmap bitmap = /* 从某个地方获取Bitmap */;
File storageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM), "Camera");
// 创建保存路径
if (!storageDir.exists()) {
storageDir.mkdir();
}
// 创建新的文件
File imageFile = new File(storageDir, "image.jpg");
try {
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
Toast.makeText(this, "图片保存成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "图片保存失败", Toast.LENGTH_SHORT).show();
}
// 刷新相册
MediaScannerConnection.scanFile(this,
new String[]{imageFile.getAbsolutePath()},
new String[]{"image/jpeg"},
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri