我正在使用Android 7.0移动设备进行测试。
我正在实现一个Android应用程序。 我需要从设备相机拍摄照片,然后从应用程序中使用相机文件夹/图库中选择它。
但是在拍完照片然后回到我的应用程序并尝试通过我的应用程序选择拍摄的照片时,当移动到相机文件夹时,最近拍摄的照片不在图库中。
但我注意到当我拍摄另一张照片并通过我的应用程序从相机文件夹中再次选择该照片时,我可以看到我之前拍摄的照片,但不是最近拍摄的照片。
我按照这个答案 - Android: Refreshing the Gallery after saving new images。 但它对我不起作用。
如果有人可以回答答案并且答案中包含要查找的文件路径,请同时添加这些详细信息。例如: - "如何拍摄Android相机图片库路径"
我在这里使用的代码: -
val cursor: Cursor? = contentResolver.query(uri, projectionColumns, null, null, sortOrder)
if (cursor != null && cursor.moveToFirst()) {
while (cursor.moveToNext()) {
// Get values per item
val imageId = cursor.getString(cursor.getColumnIndex(projectionColumns[0]))
val imageName = cursor.getString(cursor.getColumnIndex(projectionColumns[1]))
val imagePath = cursor.getString(cursor.getColumnIndex(projectionColumns[2]))
val dateTaken = cursor.getString(cursor.getColumnIndex(projectionColumns[3]))
val imageSize = cursor.getString(cursor.getColumnIndex(projectionColumns[4]))
val bucketId = cursor.getString(cursor.getColumnIndex(projectionColumns[5]))
val bucketName = cursor.getString(cursor.getColumnIndex(projectionColumns[6]))
答案 0 :(得分:0)
请注意,如果您在外部或内部私人目录中的某个位置提供 Uri 或位置,以便在点击后存储图片,那么您需要广播手动或尝试将其移动到另一个文件夹。
这里是通过传递文件路径来广播它的代码。
public void broadCastMedia(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File file = new File(path);
intent.setData(Uri.fromFile(file));
context.sendBroadcast(intent);
}
这里是如何将一个位置复制到另一个位置说图片目录然后你需要创建一个临时文件到图片目录和原始文件并传递给它。
//temp file
File destFile = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "image.jpg");
//original file
File sourceFile = new File(uri.getPath());
public static Boolean copyFile(File sourceFile, File destFile)
throws IOException {
if (!destFile.exists()) {
destFile.createNewFile();
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
} finally {
if (source != null)
source.close();
if (destination != null)
destination.close();
}
return true;
}
return false;
}
如果你在意图中给出了 EXTRA_OUTPUT 那么你需要存储你已经传递的额外的Uri,因为onActivityResult()中的数据意图将为null,那时你可以使用存储的 Uri 对存储的文件执行任何操作。