正在检索我从windows桌面手动复制到手机/模拟器的图像



我正在使用MediaStore。图像。媒体EXTERNAL_CONTENT_URI与MediaStore上的筛选器。媒体列。DATA和游标来检索图像。我需要保留存储图像的图像路径(位于子文件夹中(,因为我使用图像路径来找到正确的图像,以便将它们与其父库存项目一起显示。除了使用MediaStore,我尝试了很多不同的方法,但都没有成功。这是有效的。问题是;MediaStore。MediaColumn。DATA已弃用(叹气(。因此,我需要重构掉不推荐使用的字段。

这是一个库存应用程序,其中每个库存项目都有一个";Source"订单号"OrderItemNumber;加上其他数据。我把sdCard上的图像存储在我在";下载";称为";InventoryImages";。此文件夹下有子文件夹(实际来源名称(、(实际订单号(和(实际订单项目号(。在";OrderItemNumber;文件夹中有几个图像,都是针对这个特定组合的。

Inventory Item数据存储在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数组提供给Adapter,并使用Glide来显示它们。

最新更新