当前位置: 首页 > 知识库问答 >
问题:

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

芮立果
2023-03-14

我正在使用MediaStore. Images. Media.EXTERNAL_CONTENT_URIMediaStore上的过滤器。媒体列。数据和光标来检索图像。我需要保留存储图像的图像路径(在子文件夹中),因为我正在使用图像路径来查找正确的图像以将它们与其父库存项目一起显示。我尝试了许多不同的方法,但除了使用MediaStore外都没有成功。这很有效。问题是;MediaStore。MediaColzo。DATA已弃用(叹息)。所以我需要重构已弃用的字段使用。

这是一个库存应用程序,其中每个库存项目都有“来源”、“订单号”、“订单项号”以及其他数据。我将图像存储在SD卡上的一个文件夹中,该文件夹是我在“downloads”下创建的,名为“InventoryImages”。该文件夹下有子文件夹(实际来源名称)、(实际订单号)、(实际订单项目号)。在“OrderItemNumber”文件夹中有几个图像,都是针对这种特定组合的。

Inventory Item数据存储在sqlite db中。((预加载)(处理维护件))。但我真的在努力避免将图像(blob)存储在db中。但我对任何替代建议持开放态度。如果卸载应用程序,我宁愿不删除图像。我目前有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();
        }
    }

共有1个答案

越琦
2023-03-14

这起到了作用:

  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;
    }

现在,我可以将文件数组馈送到适配器,并使用Glide显示它们。

 类似资料:
  • 本文向大家介绍Android模拟器实现手机添加文件到sd卡的方法,包括了Android模拟器实现手机添加文件到sd卡的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android模拟器实现手机添加文件到sd卡的方法。分享给大家供大家参考,具体如下: 在DDMS中直接添加文件到模拟器sd卡如果出现错误类似:Failed to push XXXXX.txt on emulator- :

  • 操作步骤: ①以编辑状态进入地图,点击左侧图例面板中要使用的图层,所选图层的边缘显示为蓝色,表示新添加的记录将绘制在此图层上。例如:选择标注图层。 ②点击地图右上方工具栏上"添加标注"按钮。 ③在地图上,将鼠标移到想要添加标注的位置,点击一下,放置标注即可。 ④在弹出的信息窗中,填写标题及其他说明信息。 ⑤点击信息窗口右下角的"完成"图标以完成添加。 提示 ●区域和线路需双击鼠标左键结束绘制。 操

  • 我想建立一个Docker图像,包括我的自定义Powershell模块。因此,我使用Microsofts图像,我想从这里创建我自己的图像,其中包括我的psm1文件。 我想把C:\temp\someDirectory中包含的文件复制到docker linux容器中。在构建映像时,我得到以下错误: C:\temp\docker_posh>docker build--rm-f dockerfile-t d

  • 本文向大家介绍手动模拟JDK动态代理的方法,包括了手动模拟JDK动态代理的方法的使用技巧和注意事项,需要的朋友参考一下 为哪些方法代理? 实现自己动态代理,首先需要关注的点就是,代理对象需要为哪些方法代理? 原生JDK的动态代理的实现是往上抽象出一层接口,让目标对象和代理对象都实现这个接口,怎么把接口的信息告诉jdk原生的动态代理呢? 如下代码所示,Proxy.newProxyInstance()

  • 我有一个为桌面视图优化的应用程序。如果用户在移动视图中打开它,是否有任何方法可以使应用程序警告用户,并要求他们在桌面视图中打开它?

  • 仅适用于与 Android 手机配对的 Polar M600 如您无法找到您的手机,您可以使用 M600 让手机响铃,即使手机被设置为静音或仅振动也能操作。 请注意,要使用此功能,M600 必须通过蓝牙连接至手机。 让手机响铃 按下侧边电源按钮打开应用程式菜单,找到并轻触Find my phone(找到我的手机)。 如您的手机位于有效的蓝牙连接范围内,您的手机将开始响铃。如手机未响铃,请尝试移动至