摄像头
val permissions = arrayOf(Manifest.permission.CAMERA)
ActivityCompat.requestPermissions(this,permissions,1)
回调方法 申请之后的回调方法 如何写的东西
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 1) {
if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
val intent=Intent("android.media.action.IMAGE_CAPTURE")
startActivityForResult(intent,1)
// 权限已经授予,可以使用摄像头功能了
} else {
// 权限被拒绝,提示用户或做出其他处理
Toast.makeText(this,"请给我摄像头权限",Toast.LENGTH_SHORT).show()
}
}
}
摄像头选择 :拍照 或着别的
延伸
如何 将选择或者拍的照片获取然后显示 ;
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode==2)
{
if (resultCode== Activity.RESULT_OK&&data!=null)
{
data.data.let { uri ->
val uri = data.data
val bitmap = BitmapFactory.decodeStream(
contentResolver.openInputStream(Uri.parse(uri.toString()))
)
setImageview(bitmap)
viewModel.saveImage(bitmap)
/*
我们为了存一个照片 打开了OutputStream 也就是可以写入
然后我们把 uri转换成了bitmap对象
然后可以直接 设置imageview的bitmap属性做到了设置图片
*/
}
}
}
}
获取返回的 东西 Data和 别的东西;
我们拍照返回的东西(Data) 到底是什么
- 如果我们没有指定 拍照储存的保存路径的话 那么此时data将为 Intent { act=inline-data (has extras) }
- Intent { act=inline-data (has extras) } 是一种特殊的操作,用于在 Intent 中传递图像数据作为附加项(extras)而不是通过 URI。
- val image = data?.extras?.get(“data”) as? Bitmap 我们使用 data.extras?.get(“data”) 来获取附加项中的图像数据,并将其转换为 Bitmap 对象。
- 建议是自己将图像保存在文件中 或者 使用contentProvider来传递图像数据
- 具体实现可以搜索 Android FileProvider的 基本使用 以下是基于配置好了FIleProvider的代码实现
// 指定保存照片的路径和文件名
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(storageDir, "my_photo.jpg");
// 获取文件的内容 URI
Uri imageUri = FileProvider.getUriForFile(this, "com.example.fileprovider", imageFile);
// 启动相机应用
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // 授予 URI 写入权限
startActivityForResult(intent, TAKE_PHOTO);
Manifest部分代码
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
阅读和读取权限必须要有