В този код ще правим снимка от камера с разрешение за използване на камера, също ще я показваме на екрана, след което ще качваме нашата направена снимка в облачното хранилище на firebase.

Първо, отворете нов проект за Android и го свържете с облачно хранилище на firebase. За целта отидете на Инструменти и изберете Firebase и след това Cloud Storage и след това Connect. Създайте нов проект в базата данни или го свържете към вече използвания проект. След това отидете на Dash Board на проекта в

Firebase ›› Изграждане ›› Съхранение ›› Създаване. Проверете и правилата.

След това отидете в Android Studio и добавете SDK на Cloud Storage. и започнете работа.

Първо ще работим за XML.

<?xml version="1.0" encoding="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"
    tools:context=".MainActivity">

<Button
    android:id="@+id/btnPic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="take picture"

   />
    <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.

<uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
    <uses-feature android:name="android.hardware.camera.autofocus"/>

Сега отворете MainActivity:

  private val REQUEST_IMAGE_CAPTURE = 1
  private lateinit var storage: FirebaseStorage
  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
     
        storage = FirebaseStorage.getInstance()
        binding.btnPic.setOnClickListener{
            openCamera()
        }

    }

Сега внедрите функцията openCamera().

 private fun openCamera() {
        if (checkPermissionsCamera()) {
            if (isCameraPermissionEnabled()) {
                val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                try {
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
                } catch (e: ActivityNotFoundException) {
                    // display error state to the user
                }}
        }
        else{
            requestCameraPermission()
        }
    }

Сега се прилага requestCameraPermission(), CheckPermissionCamera(),isCameraPermissionEnabled()

private fun requestCameraPermission() {
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.CAMERA),
            permissionId
        )
    }
  private fun checkPermissionsCamera(): Boolean {
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_GRANTED
        ) {
            return true
        }
        return false
    }
private fun isCameraPermissionEnabled(): Boolean {
        val permission = Manifest.permission.CAMERA
        val result = ContextCompat.checkSelfPermission(this, permission)
        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"
            val storageRef = storage.reference.child("images").child(fileName)
            // Convert the Bitmap to a byte array
            val baos = ByteArrayOutputStream()
            imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
            val data = baos.toByteArray()

            // Upload the image to Firebase Storage
            val uploadTask = storageRef.putBytes(data)
            uploadTask.addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    storageRef.downloadUrl.addOnSuccessListener { uri ->
                        val downloadUrl = uri.toString()
                        Log.d("MainActivity", "Download URL: $downloadUrl")

                        // Use the downloadUrl with Glide to load and display the image
                        Glide.with(this)
                            .load(downloadUrl)
                            .error(R.drawable.img) // Set an error image if loading fails
                            .into(binding.image)

                        Toast.makeText(this, "Image uploaded successfully", Toast.LENGTH_SHORT)
                            .show()
                        // You can save the downloadUrl or use it to display the image later
                    } } else {
                    // Image upload failed
                    val exception = task.exception
                    // Handle the exception
                }
            }
        }
    }

Обновете проекта във firebase и ще видите, че снимките се записват в облака.