Android 无法使用BitmapFactory.decode文件读取图像

Android 无法使用BitmapFactory.decode文件读取图像,android,fileinputstream,bitmapfactory,Android,Fileinputstream,Bitmapfactory,位图大小只有49KB 我在AndroidManifest中拥有权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 当我将这个try catch块放入一个“if”语句中时,如下所示 val file = File(

位图大小只有49KB

我在AndroidManifest中拥有权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
当我将这个try catch块放入一个“if”语句中时,如下所示

val file = File(fullPath, fileName)
if (file.exists()){
      // the above try-catch block is here
 }
然后条件“file.exists()”不是真的(但我可以在设备中看到,该文件存在。它与“dest”参数的路径相同,其值如上所示)

我用鲍磊给出的代码保存了PNG文件。这些代码如下:

/// @param folderName can be your app's name
    private fun saveImage(bitmap: Bitmap, context: Context, folderName: String) {
        if (android.os.Build.VERSION.SDK_INT >= 29) {
            val values = contentValues()
            values.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/" + folderName)
            values.put(MediaStore.Images.Media.IS_PENDING, true)
            // RELATIVE_PATH and IS_PENDING are introduced in API 29.

            val uri: Uri? = context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
            if (uri != null) {
                saveImageToStream(bitmap, context.contentResolver.openOutputStream(uri))
                values.put(MediaStore.Images.Media.IS_PENDING, false)
                context.contentResolver.update(uri, values, null, null)
            }
        } else {
            val directory = File(Environment.getExternalStorageDirectory().toString() + separator + folderName)
            // getExternalStorageDirectory is deprecated in API 29

            if (!directory.exists()) {
                directory.mkdirs()
            }
            val fileName = System.currentTimeMillis().toString() + ".png"
            val file = File(directory, fileName)
            saveImageToStream(bitmap, FileOutputStream(file))
            if (file.absolutePath != null) {
                val values = contentValues()
                values.put(MediaStore.Images.Media.RELATIVE_PATH, folderName)
                // .DATA is deprecated in API 29
                context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
            }
        }
    }

    private fun contentValues() : ContentValues {
        val values = ContentValues()
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/png")
        values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
        values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
        return values
    }

    private fun saveImageToStream(bitmap: Bitmap, outputStream: OutputStream?) {
        if (outputStream != null) {
            try {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
                outputStream.close()
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
if语句如果(android.os.Build.VERSION.SDK_INT>=29)为非真。因此,只有剩余的else部分正在运行。在这个else部分中,我删除了这个代码

    if (file.absolutePath != null) {
        val values = contentValues()
        values.put(MediaStore.Images.Media.DATA, file.absolutePath)
        // .DATA is deprecated in API 29
        context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
    }
因为,它会导致以下错误:

e=java.io.FileNotFoundException (No such file or directory)
Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=14668, uid=10271 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
因此,上述代码中的函数saveImageToStream保存图像

现在,阅读PNG的问题是

 e=java.io.FileNotFoundException (No such file or directory)
尽管PNG确实存在。如何解决这个问题

代码fis=FileInputStream(dest)位于DidtodayActivity.kt文件中。并且,该活动文件在清单文件中定义为:

<activity android:name=".DidtodayActivity">
    <intent-filter>
        <action android:name="com.mystudio.otherlab.MainActivity" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".secondActivity" />
<activity android:name=".loginActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

清单文件中有问题吗

尽管路径正确且PNG文件确实存在,但为什么会出现错误(找不到文件)?我希望有人能帮助你

这给了你什么

试试看{

//Img=BitmapFactory.decodeFile(file.absolutePath)//它从这一行跳转到catch部分==>fis=FileInputStream(dest)。谢谢,e.message应该包含“NOT”(我编辑了这个问题)。如何解决这个问题?注释不用于扩展讨论;这个对话已经完成。因此,路径是正确的。文件确实存在。为什么会出现错误(找不到文件)是否发生?
 e=java.io.FileNotFoundException (No such file or directory)
<activity android:name=".DidtodayActivity">
    <intent-filter>
        <action android:name="com.mystudio.otherlab.MainActivity" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".secondActivity" />
<activity android:name=".loginActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>