android - 如何在 Kotlin 中重构这个 Android TakePicture 代码?
问题描述
我正在关注 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")
}
解决方案
IOException 可能是因为 Permission denied 场景。请在清单文件中添加权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
由于它需要运行时用户的批准,因此您必须发起权限请求。
ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQ_CODE);
推荐阅读
- r - 使用 read_csv 时的特殊字符(拉丁重音问题)
- swift - 在 NSImage 上以 90 度角绘制文本
- php - 具有多个 post_type 的 WP_Query
- bash - 版本——Bash?-- 在 Docker 的构建上下文期间
- python - 在我尝试使用 scipy 对它们进行下采样后文件崩溃
- reactjs - 如何将 json 数据从本地文件读取到我的 react js 应用程序到列表中?
- bash - || && 运算符打印真假输出
- php - PHP Guzzle 调用未定义的方法
- java - 如何为变量放置随机值以及如何每 30 秒刷新一次随机值?
- c# - 如何根据数据在图表上绘制彩色线条