【问题标题】:Image and file operations on AndroidAndroid上的图像和文件操作
【发布时间】:2021-03-08 01:47:04
【问题描述】:

我从 android 上的画廊或相机获取图片 url,但我无法将它们转换为文件。当我在 android 中使用 Java 开发应用程序时,有时我需要从图库和相机中获取图片到我的应用程序。但是当我尝试这样做时,我遇到了错误。 这里没有标准吗?该代码在一个 api 级别上工作,在另一个级别上不起作用。或者,当我获取某些图像的 URI 并将其转换为文件时,无论 api 级别如何,都会出现错误。我想知道这个问题是否有根本的解决方案?

我开始打算这样做

Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent,IMAGE_RESULT);

然后我用这段代码捕获数据:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == IMAGE_RESULT) {
            String filePath = ImageFilePath.getPath(OwnProfileActivity.this, data.getData());
            selectedFile = new File(filePath);
            showProgressDialog();
            Handler handler = new Handler();
            handler.postDelayed(this::chaneProfileImage, 1000);
        }
    }
}

【问题讨论】:

  • 你有没有尝试过,有什么要展示的,一些代码吗?这样可以更容易帮助你
  • @Azhagthott 对不起。我编辑了我的问题
  • 为什么要尝试将 Uri 转换为 File 实例?大多数情况下没有理由这样做。
  • 我正在使用 Parse 服务器,我应该更改个人资料图片。在解析服务器配置文件图片的类型是解析文件。所以我必须将此图片作为类型文件发送到服务器。

标签: java android image file uri


【解决方案1】:

我可以建议这样的东西,但当然这是如果你有位图:

private fun getImageUriFromBitmap(image: Bitmap): Uri? {
val bytes = ByteArrayOutputStream()
image.compress(Bitmap.CompressFormat.PNG, 100, bytes)   

val relativeLocation = Environment.DIRECTORY_PICTURES + File.pathSeparator + "NotifyMe"
val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "notifyMe_${System.currentTimeMillis()}")
    put(MediaStore.MediaColumns.MIME_TYPE, "image/png")
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation)            
        put(MediaStore.MediaColumns.IS_PENDING, 1)
    }
}
return context?.contentResolver?.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
}

然后就可以用uri创建文件了

val file = File(uri.path)

来源:https://gist.github.com/franciscobarrios/9f6634c87ca6e56ed70cd96807dd1dcb

【讨论】:

  • 感谢您的回答,但我没有位图,Intent 向我发送数据(Intent 类型),我正在从该数据中获取 uri
猜你喜欢
  • 2011-10-09
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2012-01-13
  • 2014-07-06
相关资源
最近更新 更多