在Android系统中,从图库或相机获取URI后,该URI不一定短期有效,即在应用退出或重启后,该URI可能会失效,这会导致无法访问已选择的图像。
为了解决这个问题,我们可以将返回的URI复制到应用私有目录中,并把图像保存到此目录。这可以通过以下代码实现:
private Uri mCurrentPhotoUri;
private void copyUriToAppDir(Uri uri) {
mCurrentPhotoUri = uri;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
String filePath = cursor.getString(column_index);
File fileCopy = new File(getFilesDir(), "gallery_image.png");
try {
FileUtils.copyFile(new File(filePath), fileCopy);
mCurrentPhotoUri = Uri.fromFile(fileCopy);
} catch (IOException e) {
e.printStackTrace();
}
}
if (cursor != null) {
cursor.close();
}
}
在此代码中,我们使用query()
获取图像的实际文件路径,并将该文件复制到应用程序文件目录中。最后,我们创建一个新的URI来引用该文件,并将其保存在全局变量中,以便我们可以在应用程序的整个生命周期内访问它。
使用此方法,我们可以在应用程序退出或重启后仍然访问图像,而不必担心URI失效。
上一篇:Android推送在几秒后消失。
下一篇:Android拖动条数值改变按钮