代码之家  ›  专栏  ›  技术社区  ›  Javallion

如何在Kotlin中重构这个android takepicture代码?

  •  0
  • Javallion  · 技术社区  · 6 年前

    我遵循的是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 回复  |  直到 6 年前
        1
  •  0
  •   rafa    6 年前

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

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

    由于它需要运行时用户批准,所以您必须启动权限请求。

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