从相机拍照并将其上传到 Firebase 云存储 |Kotlin | 安卓
作者:互联网
在此代码中,我们将在使用相机的许可下从相机拍摄照片,并将其显示到屏幕上,然后我们将拍摄的照片上传到 firebase 云存储。
首先,打开一个新的android项目并将其与firebase云存储连接。为此,请转到“工具”并选择“Firebase”,然后选择“云存储”,然后选择“连接”。在数据库中建立一个新项目或将其连接到已经使用的项目。然后转到项目的仪表板
Firebase >> 构建 >> 存储 >> 创建。还要检查规则。
然后进入android Studio,添加Cloud Storage的SDK。并开始工作。
首先我们将致力于 XML。
<?xml 版本 = "1.0"编码 = "utf-8" ?> < relativelayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas .android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" 工具:context = ".MainActivity" > <按钮 android:id = “@+id/btnPic” android:layout_width ="match_parent" android:layout_height = "wrap_content" android:text = "拍照" /> < ImageView android:id = "@+id/image" android:layout_width = "match_parent" android:layout_height = "200dp" android:layout_below = “@id/btnPic” android :src = “@mipmap/ic_launcher” / > </RelativeLayout>
现在将相机权限添加到 AndroidManifest.xml 中。
<使用权限 android:name = "android.permission.CAMERA" /> <使用功能 android:name = "android.hardware.camera" android:required = "true" /> <使用功能 android:name = " android.hardware.camera.autofocus" />
现在打开MainActivity:
私人val REQUEST_IMAGE_CAPTURE = 1私人 val REQUEST_IMAGE_CAPTURE = 1 私人 lateinit var存储:FirebaseStorage 覆盖 乐趣 onCreate (savedInstanceState:Bundle?) { 超级.onCreate(savedInstanceState) 绑定= ActivityMainBinding.inflate(layoutInflater) val视图=绑定.root setContentView(视图) 存储= FirebaseStorage.getInstance () 绑定.btnPic.setOnClickListener{ openCamera() } }
现在实现 openCamera() 函数
private fun openCamera() {private fun openCamera () { if (checkPermissionsCamera()) { if (isCameraPermissionEnabled()) { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // 显示错误状态给用户 }} } else { requestCameraPermission() } }
现在实现 requestCameraPermission()、CheckPermissionCamera()、isCameraPermissionEnabled()
私人 乐趣 requestCameraPermission () { ActivityCompat.requestPermissions( this , arrayOf(Manifest.permission.CAMERA), PermissionId ) }
private fun checkPermissionsCamera(): Boolean {private fun checkPermissionsCamera () : Boolean { if (ActivityCompat.checkSelfPermission( this , Manifest.permission.CAMERA ) == PackageManager.PERMISSION_GRANTED ) { return true } return false }
private fun isCameraPermissionEnabled () : Boolean { val权限 = Manifest.permission.CAMERA val结果 = ContextCompat.checkSelfPermission( this , 权限) return result == PackageManager.PERMISSION_GRANTED }
现在我们编写 onActivityResult() 函数来显示捕获的图片并将其显示在 Image View 上
override fun onActivityResult (requestCode: Int , resultCode: Int , data : Intent ?) { super .onActivityResult(requestCode, resultCode, data ) if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val imageBitmap = data ?.extras ?。get ( "data" ) as Bitmap //binding.image.setImageBitmap(imageBitmap) val fileName = "image_ ${System.currentTimeMillis()} .jpg" valstorageRef = storage.reference.child( "images" ).child(fileName) // 将 Bitmap 转换为字节数组 val baos = ByteArrayOutputStream() imageBitmap.compress(Bitmap.compressFormat.JPEG, 100 , baos) val data = baos .toByteArray() // 将图像上传到 Firebase Storage val uploadTask = storageRef.putBytes( data ) uploadTask.addOnCompleteListener { task -> if (task.isSuccessful) { storageRef.downloadUrl.addOnSuccessListener { uri -> val downloadUrl = uri.toString () 日志.d("MainActivity" , "Download URL: $downloadUrl " ) // 使用 downloadUrl 与 Glide 加载并显示图像 Glide.with( this ) .load(downloadUrl) .error(R.drawable.img) // 设置错误如果加载失败则为图片 .into(binding.image) Toast.makeText( this , "图片上传成功" , Toast.LENGTH_SHORT) .show() // 您可以保存 downloadUrl 或稍后使用它来显示图片 } } else{ // 图片上传失败 val exception = task.exception // 处理异常 } } } }
在firebase上刷新项目,会看到图片正在保存到云端。