Android:DCIM 文件夹中的重复照片存储

2023-11-29

我正在使用本机 Android 相机并将文件保存到应用程序数据文件夹 (/mnt/sdcard/Pictures/)。同时 - 在某些设备上 - 照片的另一个副本会保存到 DCIM 文件夹中。

这是我的代码:

private void startStockCameraForResult()
{
    // create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    // mediaStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    mNextImageFileUri = ImageFileUtils.getOutputMediaFileUri();
    intent.putExtra(MediaStore.EXTRA_OUTPUT, mNextImageFileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

如何防止在 DCIM 文件夹中保存额外的图像副本?

我的问题是代码产生
1 张照片:三星 Galaxy SIII、华为 HUAWEI P2-6011 等。
2 张照片:Samsung Galaxy SI、Htc HTC One XL 等。

其他线程描述删除最后添加到 DCIM 的图像。这里的问题是像 Galaxy SIII 这样没有问题的设备,并且 DCIM 上的 Imagename 和应用程序数据文件夹上的 Imagename 是不同的。

非常感谢


AFAIK,您无法可靠地告诉相机应用程序(独立于设备)a)在哪里保存图像并且b)也只保存一次。我不得不采用这种方法:

1)只需让相机应用程序将图片保存到它喜欢的任何地方,方法是删除putExtra(...)陈述:

`intent.putExtra(MediaStore.EXTRA_OUTPUT, mNextImageFileUri); // set the image file name`

这(即not设置 EXTRA_OUTPUT) 将保证只将一张图像保存到默认图片位置。

2)找到最后拍摄的照片,并保存其ID,以供以后安全检查。 (查询最后一张图片ID,排序依据DATE_TAKEN.)

3)激发捕获意图,并在你的onActivityResult再次获取最后拍摄的图像,并保存其 ID、URI 和路径。

4) 如果您的新图片 ID 大于之前保存的图片 ID,请继续,否则会惊慌失措...

5) 将原始图像文件(使用其路径)移动到您的首选位置。现在,原始文件已被删除。

6) 使用其 URI 删除原始媒体图像条目。现在该图像也已从图库中删除。

7)如果您还想删除缩略图,那么,您需要以类似的方式查询和删除它们,但我建议不要这样做:设备重新启动或其他媒体扫描应刷新缩略图缓存。此外,在删除原始图像后,您实际上很可能在短时间内需要该缩略图。 (如果您需要更长时间,则需要小心:如果您将照片移至私人应用程序目录(getExternalFilesDir(Environment.DIRECTORY_PICTURES)) 媒体经理将not(能够)为您生成缩略图,因此您可能需要管理自己的缩略图。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:DCIM 文件夹中的重复照片存储 的相关文章

  • 使用 xamarin 和 c# 更改 android 上的cultureinfo

    我调用自定义方法来动态地将当前文化信息切换为法语 fr 像这样 但在调用该方法后 我的 Android 应用程序仍然使用默认区域性 en 但在调试模式下 区域性似乎没问题 我的文件夹没问题 我两者都有 并且字符串值已配置 文件夹 resou
  • 可以挂载未加密的 obb 但出现加密错误 21

    这与 kitkat bug 无关 我正在 4 4 2 中测试 我可以毫无问题地挂载 obb 文件 问题是当尝试对加密的 obb 执行相同操作时 我在 Windows 中使用 jobb 如下 jobb d my folder o exp ob
  • 在 NestedScrollView 内找不到 RecyclerView 可见项目位置

    如果回收器视图中的第一个 最后一个完全可见的项目位于 NestedScrollView 内并且回收器具有nestedScrollingEnabled false 以便与 RecyclerView 上方的其他视图平滑滚动 所有这些功能 int
  • 避免 XferMode 替换画布上的颜色

    我正在尝试替换使用在画布上绘制的内容的颜色避免Xfer模式 http developer android com reference android graphics AvoidXfermode html 从 android 文档来看 它看
  • 使用 setMessage() 在 AlertDialog 中显示多行文本和变量

    我需要在警报对话框中显示多行文本 如果我使用多个 setMessage 方法 则仅显示最后一个 setMessage 如下所示 final AlertDialog alertDialog new AlertDialog Builder th
  • Recyclerview 中的 view.GONE 仍保留空间

    我在网上搜索了一下 发现 view invisible 和 view gone 之间有区别 vie gone 必须消失而不保留空间 但它不会发生在我身上 我该如何解决它 请帮忙看看这两张图片的链接 Android模拟器上的结果图 https
  • 如何让精灵对 cocos2d android 中的触摸做出反应?

    我有 1 支枪 当点击屏幕上的任何一点时 子弹都会发射 但根据我的要求 有 3 支枪 精灵 当触摸任何精灵时 子弹必须发射 当谷歌搜索时 我知道这可以是通过使用targetedTouchDelegate或循环所有的精灵并为每个触摸的精灵设置
  • 5.1 崩溃 - 任务描述的主要颜色应该是不透明的

    我已经在我的应用程序中实现了材料设计 它在 FATAL EXCEPTION main Process com test test PID 3195 java lang RuntimeException Unable to start act
  • Android 设备与本地 API 服务器通信

    我想知道如何在外部设备上模拟我的 Android 应用程序 以便与我的计算机上运行的本地 API 服务器进行通信 该应用程序使用 cordova 并使用 USB 连接在 Android 设备上运行 我正在本地运行 API 服务器 使用我的机
  • Android API 列表

    我想获取 CellInfo 数据 但 cellinfo size 总是发生 模拟器中的 NullPointerException 细胞信息链接 http developer android com reference android tel
  • 如何让文字发光?

    我们可以将发光效果应用于任何文本 如下所示 Updated Please also tell me what things i need to create something like this 我需要为此使用特殊字体吗 如何使用以下命令
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • Picasso onBitmapLoaded 从未调用过

    我遇到了同样的问题 我想使用毕加索生成的可绘制对象进行图像缓存 但我无法得到相同的结果 这是我用来访问位图可绘制对象的代码 Target targetBitmap new Target Override public void onPrep
  • Google Play 将我的应用程序版本显示为“随设备而变化”

    我最近在 Google Play 商店更新了我的应用程序 在我的 Play 商店应用程序页面中 版本显示为因设备而异我没有上传多个 apk 而是使用单个 apk 更新了我的应用程序 那么为什么它显示版本为因设备而异 是否有任何设置可以删除此
  • AppWidget 中的进度条

    我在应用程序小部件中使用 ProgressBar 时遇到了一个有趣的情况 文档 http developer android com guide topics appwidgets index html http developer and
  • 是否可以自定义首选项标题布局?

    我发现了类似的问题 但找不到最新的具体答案 我在用着
  • Android 依赖项 com.google.firebase:firebase-core 编译 (12.0.1) 和运行时 (11.4.2) 的版本不同

    这是我的项目 Gradle 依赖项 classpath com android tools build gradle 3 1 0 classpath com google gms google services 3 0 0 classpat
  • 获取 Blob 图像并将该图像转换为 Bitmap 图像

    我正在从数据库中获取 blob 格式的图像 我想将其转换为位图图像 我用来将位图转换为 Blob 的代码放在下面 但是请告诉我如何反转它 ByteArrayOutputStream boas new ByteArrayOutputStrea
  • onActivityResult() Intent 数据始终为 null

    有人可以告诉我为什么Intent data总是为空 Override protected void onActivityResult int requestCode int resultCode Intent data super onAc
  • 当应用程序在 Android 中首次启动时,仅显示一次消息对话框

    我在android中开发了一个应用程序 其中一个重要的要求是仅在应用程序第一次运行时显示语言支持的消息对话框 然后每次用户再次运行应用程序时它都会消失 我 我尝试过使用共享首选项 但没有成功 还有其他方法吗 在 onCreate 处理程序中

随机推荐