写一个Android遍历SD卡目录找出所有图片文件并将其按照其来源的软件进行分类的代码
时间: 2023-06-26 10:04:15 浏览: 60
以下是一个简单的 Android 代码示例,用于遍历 SD 卡目录中的所有图片文件并按来源软件进行分类:
```java
public class ImageScanner {
private static final String[] IMAGE_EXTENSIONS = {"jpg", "jpeg", "png", "gif", "bmp"};
public static List<ImageFile> findAllImages(Context context) {
List<ImageFile> imageFiles = new ArrayList<>();
String[] projection = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATE_ADDED, MediaStore.Images.Media.SIZE, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media.DATE_ADDED);
if (cursor != null) {
while (cursor.moveToNext()) {
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
long fileSize = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));
String folderName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME));
long dateAdded = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));
if (isImageFile(filePath)) {
ImageFile imageFile = new ImageFile(filePath, fileName, fileSize, folderName, dateAdded);
imageFiles.add(imageFile);
}
}
cursor.close();
}
return imageFiles;
}
private static boolean isImageFile(String filePath) {
for (String extension : IMAGE_EXTENSIONS) {
if (filePath.endsWith("." + extension)) {
return true;
}
}
return false;
}
}
```
这个类实现了 `findAllImages()` 方法,它使用 `MediaStore` API 来查找所有图片文件并返回一个包含它们的列表。方法中使用了 `Cursor` 类从 `MediaStore` 中检索图像信息,然后将每个符合条件的文件都添加到 `ImageFile` 对象中,并添加到返回的列表中。
`ImageFile` 类是一个简单的 Java 类,用于保存图片文件的信息:
```java
public class ImageFile {
private String path;
private String name;
private long size;
private String folderName;
private long dateAdded;
public ImageFile(String path, String name, long size, String folderName, long dateAdded) {
this.path = path;
this.name = name;
this.size = size;
this.folderName = folderName;
this.dateAdded = dateAdded;
}
public String getPath() {
return path;
}
public String getName() {
return name;
}
public long getSize() {
return size;
}
public String getFolderName() {
return folderName;
}
public long getDateAdded() {
return dateAdded;
}
}
```
你可以在 `findAllImages()` 方法中添加其他代码来根据来源软件对图片进行分类,例如检查每个图片的 Exif 数据并根据摄像头应用程序进行分类。