【问题标题】:android Thumbnails.getThumbnail() and phones w/o ext storageandroid Thumbnails.getThumbnail() 和不带外部存储的手机
【发布时间】:2011-08-05 17:57:32
【问题描述】:

HTC 不可思议,没有 SD 卡只有内部存储器。我的应用程序使用 MediaStore.Images.Thumbnails.getThumbail() 来检索图像缩略图。查看代码,Thumbnails 在其 impl 中对外部存储 URI 进行硬编码!

更糟糕的是,MediaStore 是最终版本,因此无法扩展,而且它使用内部 SDK 调用,因此无法复制。

有人知道解决方法吗?最坏的情况是我需要从缩略图中找出我需要的东西并自己维护它。非常不受欢迎。

【问题讨论】:

    标签: android


    【解决方案1】:

    android Thumbnails.getThumbnail() 和手机没有扩展存储

    所有带有 Android Market 的 Android 设备在发货时都至少有 2GB 的外部存储空间。该存储在任何给定时刻是否可用可能会有所不同。

    HTC 不可思议,没有 SD 卡只有内部存储器。

    HTC Droid Incredible 具有外部存储。它不是 SD 卡。外部存储并不意味着“可移动存储”,而是可以由用户作为驱动器/卷安装在其台式机或笔记本电脑上的存储。

    我的应用程序使用 MediaStore.Images.Thumbnails.getThumbail() 来检索图像缩略图。

    假设您遇到了这个问题。如果您希望获得解决问题的帮助,解释您的问题通常很有用。

    查看代码,Thumbnails 在其 impl 中硬编码外部存储 URI!

    查看代码,我没有看到硬编码发生在哪里。在MediaStore 的任何地方都没有对sdcard 的引用。将来考虑使用超链接指向此类资源。

    更糟糕的是,MediaStore 是最终版本,因此无法扩展,而且它使用内部 SDK 调用,因此无法复制。

    考虑到除非通过完整的固件更换,否则您无法更换 MediaStore

    有人知道解决方法吗?

    可能,但由于您拒绝解释“this”是什么,因此无法回答您的问题。


    更新基于 cmets:

    我拥有一台 HTC DROID Incredible。 /mnt/sdcard/ 是用户可写的。我写了一个写给它的程序。如果你知道如何编程,你可以尝试编写一个写入它的程序——确保持有WRITE_EXTERNAL_STORAGE 权限。权限位(我的/mnt/sdcard/ 为 075)与 Android 1.x/2.x 设备 AFAIK 上的外部存储并不特别相关,因为外部存储在这些操作系统版本上是 vfat,因此并不真正尊重Linux 权限。

    关于EXTERNAL_CONTENT_URI,它变成了content:// Uri,它不会“硬编码外部存储”。

    【讨论】:

    • 1) 不可思议的是,getExternalStorageDirectory() 返回 /mnt/sdcard,这是一个非用户可写的(700)目录 2) 2.3.4_r1 中的类 Thumbnails 硬编码 EXTERNAL_CONTENT_URI
    • 3) 问题只是 Thumbnails.getThumbnail() 无法解析内部内容 URI。当我运行图库时,库存的 android 代码本身正在记录有关“无法在 /mnt/sdcard 中创建位图”的错误。
    • 查看更新的答案。关于“无法在 /mnt/sdcard 中创建位图”,请确保您的开发机器上没有安装外部存储,如果这没有帮助,也许尝试恢复出厂设置或其他方式。我有理由确定您的问题源于您的设备特有的问题。如果 DROID Incredible 上的外部存储完全无法使用,我们在一年前就已经注意到了。
    • 我也有一个 htc 机器人。图像被写入内部存储。这些图像的 URI 是内部内容 URI。物理上,图像安装在 /mnt/emmc 上。当我从外部内容 URI 库中查询图像时,我没有得到任何结果。当我从内部内容 URI 库查询时,我得到了我所有的图像。这是通过编码发现的,我不是在猜测它。因此,Thumbnail.getThumnails() 无法解析设备上的任何图像。
    • 即使我的任何代码都没有运行,日志中的 STOCK ANDROID 缩略图代码也有错误,表明它无法写入外部存储 /mnt/sdcard/DCIM/... getExternalStoageDirectory( ) 再次返回 /mnt/sdcard 并且图像不会存储在 /mnt/emmc 下的这个位置。
    【解决方案2】:

    一年后,Android 的 2.3+ 版本似乎不再使用 INTERNAL_CONTENT_URI 作为用户媒体;是否存在外部 SD 卡无关紧要。在我拥有的所有 android 模型中,INTERNAL_CONTENT_URI 仅用于系统应用程序,HTC 设备将其用于教程和其他奇怪的媒体文件。从相机拍摄的所有照片和视频、所有下载内容以及我见过的所有其他媒体类型都将保存到 EXTERNAL_CONTENT_URI。我有信心说现在可以完全避免使用 INTERNAL_CONTENT_URI,只需使用 EXTERNAL_CONTENT_URI 即可检索所有用户媒体;至少是用户会感兴趣的任何东西。

    我使用过的一些设备包括 HTC Thunderbolt、HTC Droid DNA、Galaxy Nexus 和三星 Galaxy S3。三星设备很少使用 INTERNAL_CONTENT_URI,而且我还没有在 Nexus 设备上看到任何东西。我见过的唯一仍在使用它的现代设备是 HTC 设备,但重申并得出结论,HTC 设备上的 INTERNAL_CONTENT_URI 中存储的用户绝对没有任何用处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2020-11-09
      相关资源
      最近更新 更多