Как провести рефакторинг этого кода Android TakePicture в Kotlin? - PullRequest
0 голосов
/ 12 июня 2018

Я следовал примеру «Сфотографируйся» с веб-сайта 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!

(отредактировал код выше, чтобы отразить изменение кода и изменение каталога на общедоступный)

Мой код в mainacctivity выглядит следующим образом:

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

1 Ответ

0 голосов
/ 13 июня 2018

IOException может быть из-за сценария «Отказано в доступе». Пожалуйста, добавьте разрешение в файл манифеста.

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

И, поскольку это требует одобрения пользователя во время выполнения, вы должны инициировать запрос разрешения.

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