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

时间:2018-06-12 19:27:33

标签: android image kotlin take

我正在效仿'拍照'来自Android网站(随着我的进展将代码转换为Kotlin)。当一切都在一个班级时,一切正常。然后我决定委托将文件对象和字符串路径提供给另一个类。但我的应用程序开始崩溃(下面的错误报告)。我在这里需要学习什么?

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!

(编辑上面的代码以反映代码的更改和目录更改为公共代码)

我在mainactivity中的代码如下:

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

1 个答案:

答案 0 :(得分:0)

IOException可能是因为权限被拒绝的情况。请在清单文件中添加权限。

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

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

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