当前位置: 首页 > 知识库问答 >
问题:

无法将流图像解码为片段

端木狐若
2023-03-14

代码完美的作品,但我有问题的权限拒绝,但我已经把READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限Android清单任何想法。已经尝试过这个无法解码流:java.io.FileNotFoundExc0019(权限被拒绝)

位图工厂﹕ 无法解码流-空

E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/storage/emulated/0/DCIM/Camera/IMG_20201001_125759.jpg(权限被拒绝)

Androidanifest.xml

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

主要活动

    //Open phone gallery
    private void getImageFromGallery(){
        Intent i = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(i, GALLERY_REQUEST);
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //Check if the intent was to pick image, was successful and an image was picked
        if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            ImageView imageView = (ImageView) findViewById(R.id.the_grid_image_preview);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }

共有1个答案

薛烨
2023-03-14

如果您使用的是Android 6.0版或更高版本,则需要在运行时请求权限:

https://developer.android.com/training/permissions/requesting

为此,我使用了一个叫做Dexter的不错的包装器,它简化了它,并且非常容易使用。

然后,您可以在片段中编写此函数:

private fun checkFilePermissions(onPermissionGranted: () -> Unit) {
        Dexter.withActivity(activity)
            .withPermissions(
                android.Manifest.permission.READ_EXTERNAL_STORAGE,
                android.Manifest.permission.WRITE_EXTERNAL_STORAGE
            )
            .withListener(object : BaseMultiplePermissionsListener() {
                override fun onPermissionsChecked(response: MultiplePermissionsReport) {
                    if (response.areAllPermissionsGranted()) {
                        onPermissionGranted()
                    }
                }
            })
            .check()
    }

在调用方法getImageFromGallery()时,只需像这样调用它:


...
checkFilePermissions {
    getImageFromGallery()
}
 类似资料:
  • 我想下载一个JS中的图像,它是bas64编码的。为此,我首先解码了图像并尝试下载它。文件正在下载,但下载文件中的内容什么都不是。 编码后的图像就像: data: Image/png; bas64, iVBORw0KGgoAAAANSUhEUGAAAAUAAAFCAYAAACNbyblAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAABJ

  • 问题内容: 我正在使用SQLite,但无法将图像保存到数据库。这是我的代码: 这是我得到的错误: 我正在使用以下jar:sqlitejdbc-v056.jar。 有任何想法吗?谢谢 问题答案: 您正在使用的SQLite JDBC实现未实现(因此,确切 的说法是SQLite JDBC驱动程序未实现 错误消息)。 您需要改用该方法。

  • 问题内容: 嘿,我不确定为什么每次选择图库中的图像时都会出现这种情况吗? 这是代码: 错误: 问题答案: 不要假设有文件路径。Android 4.4及更高版本即将删除它们。而且您获得的uri已经没有路径。 您仍然可以通过()或文件描述符访问文件内容。 在这里进行了解释:ContentProviders:打开一个文档(向下滚动,指向该节的链接似乎已损坏) 而且确实适用于较旧的android版本。

  • HTML and CSS allows you to embed external resources right into base using data:URL scheme. Usually, image conversion to base64 is done with external on-line services or third-party assets builder. HTM

  • 我使用下面的脚本从MongoDB中获取JSON文件,对其进行解析,然后将其插入到Oracle表中。 > 该脚本可以正确地将所有值插入到Oracle表中。这包括值Photo,它是一个base64 formate的图像,它比32KB大得多。 表Appery_Photos中的列Photo是CLOB类型,而列DecodedPhoto是BLOB类型。 问题在于行,我用它将CLOB解码为BLOB。函数base