什么是Context.getExternalMediaDir()?

Jef*_*rod 5 media android image android-sdcard

Javadoc for Environment.getExternalStoragePublicDirectory()中的示例提到Context.getExternalMediaDir()但是此方法在我的Android API版本中不可用,我无法在任何版本的任何位置找到它.这是一个错字还是从未发布过的东西?

void createExternalStoragePublicPicture() {
    // Create a path where we will place our picture in the user's
    // public pictures directory.  Note that you should be careful about
    // what you place here, since the user often manages these files.  For
    // pictures and other media owned by the application, consider
    // Context.getExternalMediaDir().
    File path = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
Run Code Online (Sandbox Code Playgroud)

Gub*_*ron 5

不,这不是打字错误(不再),这是 Android L Preview 上的新方法

基本上是 google 的天才,在 /Android/data/ 文件夹中放置一个“.nomedia”文件,这使得在您的文件夹中使用 MediaScannerConnection scanFile() 方法的任何尝试都会失败。因此,如果您有一个创建或下载媒体的应用程序,您现在可能正在做一些杂技来扫描该媒体并将其提供给您的提供商,除非您有新的 API,我们没有,因为其他手机都运行更老的安卓...

目前我们的解决方法是自己扫描文件并将它们插入到与之匹配的内容提供者中。

例如,对于图像,已经有一种方法可以使用 MediaStore.Images.Media.insertImage (ContentResolver cr, String imagePath, String name, String description)

我们今天讨论中发布了这个解决方案几分钟后,一位来自谷歌的工程师告诉我们 Context.getExternalMediaDir() 据说它会给你一个二级外部存储(又名 Sd 卡)的私有路径,它是 MediaScanning 友好的。

“新的 android.content.Context.getExternalMediaDirs() 返回所有共享存储设备上这些目录的路径。”

我的猜测(我还没有测试过)是目录路径将类似于

/存储/extSdCard/Android/媒体/

谁开始管理关于使用 SD 卡的开发决策是一个真正的白痴,过去几周我们从 Google-Android 上看到的大量错误判断、错误决策和他妈的让我想起了微软.


Eri*_*ric 4

我相信它的名字不正确; 我认为他们的意思是说" Context.getExternalFilesDir()".这可能是一个拼写错误,或者该方法可能稍后已重命名.

根据评论中的解释(" 应用程序拥有的图片和其他媒体 "),它与getExternalFilesDir(String type)" 应用程序可以放置其拥有的持久文件的位置 " 紧密匹配.请注意,您可以传递nullgetExternalFilesDir,返回根目录,或指定返回您正在查找的文件夹类型.

我会说,我在这里有点猜测.然而,这似乎是这种看似不存在的方法最可能的解释.