我正在效仿'拍照'来自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")
}
答案 0 :(得分:0)
IOException可能是因为权限被拒绝的情况。请在清单文件中添加权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
由于需要运行时用户批准,您必须发起权限请求。
ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQ_CODE);