如何解决检索我从 Windows 桌面手动复制到手机/模拟器的图像
我使用 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 和 MediaStore.MediaColumns.DATA 上的过滤器和一个 Cursor 来检索图像。我需要保留存储图像的图像路径(位于子文件夹中),因为我使用图像路径来查找正确的图像以将它们与其父库存项目一起显示。除了使用 MediaStore,我尝试了许多不同的方法,但都没有成功。这是有效的。问题是; MediaStore.MediaColumn.DATA 已弃用(叹气)。所以我需要重构弃用的字段使用。
这是一个库存应用程序,其中每个库存项目都有一个“来源”、“订单编号”、“订单项目编号”以及其他数据。我将 sdCard 上的图像存储在我在“下载”下创建的名为“InventoryImages”的文件夹中。该文件夹下有子文件夹(实际来源名称)、(实际订单号)、(实际订单项号)。 “OrderItemNumber”文件夹中有几张图片,都是针对这个特定组合的。
库存项目数据存储在一个 sqlite 数据库中。 ((预加载)(在维修件上工作))。但我真的想避免将图像(blob)存储在数据库中。但我愿意接受任何和所有替代方案的建议。如果应用程序被卸载,我宁愿不删除图像。我目前有 104 个库存物品,每个物品平均有 4 张图片。
同样,包含的片段正在工作,我只需要一个替代值是图像路径的 DATA 列。
片段:
public class ListViewFragment extends Fragment
implements IAdapterCallback
{
public ArrayList<ImageInfo> getAllMediaStoreImages()
{
ArrayList<ImageInfo> allImages = new ArrayList<>();
String inventoryDirectory;
if(Build.FINGERPRINT.contains("generic"))
inventoryDirectory = "Inventory"; // <-- use this for the emulator
else
inventoryDirectory = "InventoryImages"; // <-- use this for my phone
Uri uri =
MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String selection =
MediaStore.MediaColumns.DATA + " LIKE ? ";
String[] selectionArgs = new String[]{"%" +
inventoryDirectory + "%"};
Cursor cursor =
this.getActivity().getContentResolver().query(uri,null,selection,selectionArgs,null);
String[] names = cursor.getColumnNames();
try {
if (cursor != null) {
while (cursor.movetoNext())
{
String filePath =
cursor.getString(cursor.getColumnIndex((MediaStore.MediaColumns.*DATA*)));
String fileName =
cursor.getString(cursor.getColumnIndex((MediaStore.MediaColumns.TITLE)));
int inventoryDirectoryLoc =
filePath.indexOf(inventoryDirectory) +
inventoryDirectory.length() + 1;
String matchPath =
filePath.substring(inventoryDirectoryLoc,filePath.lastIndexOf('/'));
allImages.add(new
ImageInfo(filePath,fileName,matchPath));
}
}
return allImages;
}
catch (Exception x)
{
x.printstacktrace();
return null;
}
finally
{
if(cursor != null)
cursor.close();
}
}
解决方法
这有效:
public ArrayList<File> getItemInventoryImages(String sourceSpecificPath)
{
String sourcePath = Environment.getExternalStorageDirectory().toString() + "/Download/" + sourceSpecificPath;
File file = new File(sourcePath);
if(!file.isDirectory()) {return null;}
if(!file.canRead() {return null;}
File[] files = file.listFiles();
return files;
}
现在我可以将 File 数组提供给适配器并使用 Glide 来显示它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。