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
解決策
- バージョン4.0.2以上にあげる
1番シンプルな解決策。 - オプションの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の不具合修正によって引き起こされた不具合。