Android8でcordova-camera-pluginを使うと"Error capturing image"とエラーメッセージが返ってくる


TL; DR

cordova-camera-pluginのバージョンを4.0.2以上にあげる

概要

saveToPhotoAlbumをtrueにして、getPicture()関数を呼んだ際にErrorCallbackがよばれて、Error capturing imageというメッセージが返ってくる。

原因

Android8からパーミッション(permission)の扱いが変わったため。
saveToPhotoAlbumをtrueにしていると、端末に写真を保存するので書き込み権限(WRITE_EXTERNAL_STORAGE)が必要です。
バージョン4.0.2以前はその際に読み込み権限(READ_EXTERNAL_STORAGE)のみを指定していました。
Android8未満ではそれでも問題なく動作したのですが、Android8移行では書き込み権限も要求するようになったため写真の保存ができずエラーになっていました。

詳しくはチケットが起票されているのでそちらをご参照ください。
https://issues.apache.org/jira/browse/CB-13781

解決策

  1. バージョン4.0.2以上にあげる
    1番シンプルな解決策。
  2. オプションのsaveToPhotoAlbumをfalseにする
    何らかの事情でプラグインのバージョンを上げれない場合の回避策(workaround)になります。
    saveToPhotoAlbumがfalseだと端末に写真を保存しないので権限が必要ないです。
    詳しくは以下を見てください。
    https://stackoverflow.com/questions/29392639/error-capturing-image-with-phonegap-on-android

雑談

Monacaを使用していてmonacaのバージョンを6.5→7.1に上げた際にcorodova-camera-pluginのバージョンも更新される。
ただ、そのバージョンが4.0.1でちょうど本事象が解決される前のバージョン。
ほんと困るなあ。
今回の件は、Androidの不具合修正によって引き起こされた不具合。