android上的java图像和文件操作

iyfamqjs  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(340)

我从android上的gallery或camera获取图片url,但无法将其转换为文件。当我在android中用java开发一个应用程序时,有时我需要将图片从多媒体资料和照相机中获取到我的应用程序中。但当我试着这样做的时候,我会犯错误。这里没有标准吗?代码在一个api级别上工作,而在另一个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);
        }
    }
}
fivyi3re

fivyi3re1#

我可以提出这样的建议,但当然这是如果你有一个位图:

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

相关问题