Kanade Labo

かなで研究所

Android Studio カメラアプリ作成その19(連続撮影2)

こんにちは かなで です。

前回の続きですが、実行時にLogcat上では、63行目、46行目にエラーのヒントがあるような感じでした。

この行を見てみます。

46行目
bindPreview(cameraProvider,"capture")
63行目
var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageCapture, preview)

※オブジェクト指向が若干理解できた気がする今となっては完全におかしなことを書きますが、今までもおかしなことを書いてきてるので気にしないことにします…

この46行目は、captureを実行したときにエラーとなった。つまりinitを実行したときはまだエラーではなかったと読めます。

そして63行目は、bindPreviewの中の記述ではありますが、先ほど追加したcapture用の処理の【前】の部分でエラーになっていることがわかります。

(いつもの)結果論からですが、

63行目は「カメラのライフサイクルに、ImageCaptureとかpreviewをバインドする」というものらしいのですが
ライフサイクル?バインド?とかわからないなりの理解でいうと
「今作ってるカメラ機能に、【保存する】という機能と【プレビューを表示する】という機能を追加する」という事らしいです。

最初に、上記を追加済みなのに、captureの時に、また追加する。だからエラーになる。という事?

じゃあどうするか?こうしました。

        cameraProvider.unbindAll()
        var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageCapture, preview)

追加済みなのに、再度追加するときに失敗するのであれば、最初に削除してしまおうと。

この「 cameraProvider.unbindAll() 」でカメラのライフサイクル?から全部の機能を削除する と読むことにしました。

さてこれで実行。

と、その前に

5分間隔(300000ミリ秒)と設定してたところを、試験的に5秒間隔(5000ミリ秒)に変更しておきます。

改めて実行↓

プレビューが問題なく表示されました!

続けて、Device File Explorerを見ると、Picturesフォルダにファイルが増えていくことが確認できました。

なんと…うまくいってしまいました(笑

本当は、valをvarに変えないといけないとかinit用に処理を追加してあげないといけないとか
そういうものを行うつもりで考えていたのですが…

勘違い(無駄な話)だったようです(汗

ん~まだやっぱりちゃんと理解できてない証拠ですね。

とりあえずこれで動くようにはなったわけです。

めでたしめでたし?

最後までお読みいただきありがとうございました。
気になることがあったら、コメント頂けると嬉しいです。
自主学習も兼ねて記事にするかもしれません。

-AndroidStudio