Действие захвата изображения работает только иногда без четкой причины, почему - PullRequest
1 голос
/ 05 апреля 2019

Я использую cameraKit для управления работой камеры. Моя проблема сейчас заключается в том, что иногда это работает просто отлично, а иногда - совсем нет. Я вставил несколько отпечатков журнала, как вы могли видеть в коде ниже. Иногда он проходит через все журналы, а иногда просто печатает «кнопка нажата».

Не могу понять, почему это не соответствует:

* Я пробовал запускать и перезапускать его примерно 0 раз для проверки, ничего не меняя, и это было непоследовательным.

class CameraFragment : Fragment() {

    lateinit var cameraKitView: CameraKitView

    private lateinit var localImageViewModel: LocalImageViewModel

    override fun onAttach(context: Context) {
        super.onAttach(context)

        activity?.let {
            localImageViewModel = ViewModelProviders.of(this).get(LocalImageViewModel::class.java)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(co.getdere.R.layout.fragment_camera, container, false)


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val mActivity = activity as CameraActivity

        cameraKitView = view.findViewById(co.getdere.R.id.camera_view)
        cameraKitView.aspectRatio = 0.8f

        val captureButton = view.findViewById<ImageButton>(co.getdere.R.id.camera_btn)

        captureButton.setOnClickListener {

            Log.d("photoActivity", "button clicked")


            cameraKitView.captureImage { _, image ->

                Log.d("photoActivity", "image captured")


                val timeStamp = System.currentTimeMillis().toString()
                val fileName = "Dere$timeStamp.jpg"

                val path =
                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + File.separator + "Dere"
                val outputDir = File(path)
                outputDir.mkdir()
                val savedPhoto = File(path + File.separator + fileName)

                Log.d("photoActivity", "new file created")

                try {
                    val outputStream = FileOutputStream(savedPhoto.path)
                    outputStream.write(image)
                    outputStream.close()
                    mActivity.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(savedPhoto)))

                    Log.d("photoActivity", "Image saved to file and system rescaned the device")
                 Glide.with(this).load(savedPhoto).into(mActivity.photoEditorFragment.view!!.findViewById(R.id.photo_editor_image))

                    Log.d("photoActivity", "image loaded into new fragment")


                    mActivity.switchVisibility(1)

                    Log.d("photoActivity", "visibility switched")


                    val localImagePost = LocalImagePost(2343, savedPhoto.path)
                    Log.d("photoActivity", "Took photo")

                    localImageViewModel.insert(localImagePost)


                } catch (e: java.io.IOException) {
                    e.printStackTrace()
                    Log.d("photoActivity", "failed to take photo")

                }

            }
        }
    }


    override fun onStart() {
        super.onStart()
        cameraKitView.onStart()
    }

    override fun onResume() {
        super.onResume()
        cameraKitView.onResume()
    }

    override fun onPause() {
        cameraKitView.onPause()
        super.onPause()
    }

    override fun onStop() {
        cameraKitView.onStop()
        super.onStop()
    }


    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    override fun onDetach() {
        super.onDetach()
        stopRepeatingTask()
    }

    companion object {
        fun newInstance(): CameraFragment = CameraFragment()
    }


}

1 Ответ

0 голосов
/ 18 мая 2019

Если вы используете его для какого-то другого приложения, у меня есть совет для вас.Используйте не бета-версию.Работает отлично.Текущая версия: v0.13.4. Документы устарели.

Новое использование:

    cameraKit.addCameraKitListener(object : CameraKitEventListener {
            override fun onVideo(video: CameraKitVideo?) {
                Log.i("camera", "onVideo")
            }

            override fun onEvent(event: CameraKitEvent?) {
                Log.i("camera", "onEvent: $event")
            }

            override fun onImage(capturedImage: CameraKitImage?) {
                Log.i("camera", "onImage")
                capturedImage?.let { image ->
                    cameraViewModel.saveAndCompressImage(image.jpeg)
                }
            }

            override fun onError(e: CameraKitError?) {
                Log.i("camera", "onError: ${e?.exception}")
            }
        })
...