private fun takePhoto() {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(packageManager) != null) {//判断是否有相机应用
// Create the File where the photo should go
var photoFile: File? = null
try {
photoFile = createImageFile()//创建临时图片文件
} catch (ex: Exception) {
ex.printStackTrace()
}
// Continue only if the File was successfully created
if (photoFile != null) {
//FileProvider 是一个特殊的 ContentProvider 的子类,
//它使用 content:// Uri 代替了 file:/// Uri. ,更便利而且安全的为另一个app分享文件
val photoURI = FileProvider.getUriForFile(this,
"com.jiutong.base.utils.MyProvider", //和mainxmlyiyang
photoFile)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, takePictureCameraTag)
}
}
}
private fun createImageFile(): File {
// Create an image file name
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(Date())
val imageFileName = "JPEG_" + timeStamp + "_"
//.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
val storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
//创建临时文件,文件前缀不能少于三个字符,后缀如果为空默认未".tmp"
var image: File? = null
try {
image = File.createTempFile(
imageFileName, /* 前缀 */
".jpg", /* 后缀 */
storageDir /* 文件夹 */
)
} catch (e: IOException) {
e.printStackTrace()
}
takePictureCameraPath = image!!.absolutePath
return image
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == takePictureCameraTag) {
GlideUtil.loadfile(File(takePictureCameraPath), mIv_sent_cargo_sheet)
//unLoadPhoto(takePictureCameraPath)
return
}
}
自定义 provide 继承就行
class MyProvider:FileProvider() { }
xml文件中添加
<provider android:name="com.jiutong.base.utils.MyProvider" android:authorities="com.jiutong.base.utils.MyProvider"//内容为 右键copy reference 目录 android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <external-path name="carchuangyou.apk" path="Android/data/file/download" /> <external-path name="my_images" path="Android/data/winsky/files/Pictures/" /> <external-path name="images" path="Pictures/" /> <external-path name="dcim" path="DCIM/" /> </paths> <paths> <external-path path="Android/data/_winsky/" name="files_root" /> <external-path path="." name="external_storage_root" /> </paths> </resources>