我遵循的是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可能是由于权限被拒绝的情况。请在清单文件中添加权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
由于它需要运行时用户批准,所以您必须启动权限请求。
ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQ_CODE);