如何在 Kotlin 中重构此 Android TakePicture 代码?

How to refactor this Android TakePicture code in Kotlin?

我正在按照 Android 网站上 'Take Picture' 的示例进行操作(在进行过程中将代码转换为 Kotlin)。当一切都在一个 class 中时,一切正常。然后我决定将提供文件对象和字符串路径的责任委托给另一个 class。但是我的应用程序开始崩溃(下面的错误报告)。我在这里要学什么?

package com.dj.camera1


import android.os.Environment
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.*


class UniqueName {

    companion object {
        var mCurrentPhotoPath: String = ""
    }
    @Throws(IOException::class)
    internal fun createImageFile(): File {
        // Create an image file name
        var timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
        var imageFileName = "JPEG_" + timeStamp + "_"
        var storageDir:File = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
        var image = File.createTempFile(
                imageFileName, /* prefix */
                ".jpg", /* suffix */
                storageDir      /* directory */
        )
        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = image.getAbsolutePath()
        return image
    }
}

我遇到了 IOException!

(编辑了上面的代码以反映代码的变化和目录的变化到 public 一个)

我在mainactivity中的代码如下:

lateinit var photoContainer:File
                    try {
                        photoContainer = UniqueName().createImageFile()
                    } catch (c:IOException){
                        Log.d("MainActivity","PhotoContainer couldn't be initialised")
                    }

IOException 可能是因为权限被拒绝scenario.Please在清单文件中添加权限。

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

并且由于需要运行时用户批准,所以您必须发起权限请求。

ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQ_CODE);