编程语言
首页 > 编程语言> > 从相机拍照并将其上传到 Firebase 云存储 |Kotlin | 安卓

从相机拍照并将其上传到 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上刷新项目,会看到图片正在保存到云端。

标签:Firebase,Kotlin,云存储
来源: