【问题标题】:How to retrieve the current app folder where my android app has access?如何检索我的 android 应用程序可以访问的当前应用程序文件夹?
【发布时间】:2012-12-05 09:47:47
【问题描述】:

我正在我的应用程序中启动一个摄像头意图,并希望将图片存储在我的应用程序文件夹中的图像文件夹中。为了实现这一点,我正在启动这样的凸轮意图

public void startCamAction(View view) {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));
    startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);
}

在下一个活动中,我想对这张图片做点什么,但我猜它不起作用,因为我的应用无法访问这个文件夹。图片存放的文件夹是

content:://media/external/images/media/20

这不是所需的路径,我必须如何配置它才能将图片存储在我的应用文件夹中?

谢谢

【问题讨论】:

    标签: android android-camera mediastore android-mediarecorder


    【解决方案1】:

    其实content:://media/external/images/media/20Uri不是真正的文件路径..

    所以如果你想从这个 Uri 中获得真正的路径,那么你必须做类似的事情,

    Uri uri = content:://media/external/images/media/20
    String imageFile = getRealPathFromURI(uri);
    

    getRealPathFromURI()的方法是

    private String getRealPathFromURI(Uri contentURI) {
        Cursor cursor = getContentResolver()
                   .query(contentURI, null, null, null, null); 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        return cursor.getString(idx); 
    }
    

    更新:

    也来自您的代码行,

    intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));
    

    您捕获的图像存储在您的应用程序的内部存储中。因此,您可以在任何活动的应用程序中访问此目录。

    要从此目录中检索文件,您可以使用简单的文件操作。

    喜欢,

    File directory = this.getApplicationContext().getDir("images", MODE_PRIVATE);
    

    【讨论】:

    • 感谢您的帖子!我想知道为什么图片已存储在外部存储中?我没有在创建意图时配置它。你知道为什么会这样吗?
    • 实际上,Android Camera 默认将捕获的图像存储在/DCIM 目录中。并且有时intent.putExtra 无法在某些安卓设备上运行。 :-)
    【解决方案2】:

    使用

    Context.getExternalCacheDir()
    Context.getExternalFilesDir(String type)
    

    您将获得您的应用可以访问的 SD 卡上的目录。它看起来像

    /sdcard/Android/your.app.package.name/
    

    别忘了把它添加到你的清单中:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    【讨论】:

    • 没有真正回答这个问题。图片已保存在外部方向(参见内容 URI)。他想把图片保存在app数据目录中。
    【解决方案3】:

    我怀疑相机可以保存到应用程序的目录中。主要是因为权利问题。

    最好将其存储到外部存储(正如您所做的,从 URI 判断:content://media/external/images/media/20

    您始终可以使用此 URI 复制文件并将其保存在您的应用数据目录中,然后将其从外部目录中删除。

    其他解决方案是指定一个自己的 ContentProvider。在此 ContentProvider 中,您可以保存文件。 http://dharmendra4android.blogspot.be/2012/04/save-captured-image-to-applications.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2019-02-07
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多