質問: カメラを呼び出して撮影した写真orギャラリから選択した写真をアップロードするツールを作っています。 スマホにインストールして動作確認中ですがandroidでの挙動が思ったようにいきません。 iPhoneの場合、ボタンをタップすると「写真またはビデオを取る」「フォトライブラリ」「その他」「キャンセル」が表示されます。 androidの場合「次から開く」というメニューが出て、「ドライブ」や「ギャラリー」はあるのですがカメラで撮影できそうなアイテムはありません。 また、写真を長押ししても複数選択できない状態です。 プラグインはCameraとCaptureを有効にしています。 HTML内で下記のように書いています。 ``` input type="file" id="img" accept="image/*;capture=camera" multiple="multiple"> ``` iPhoneと同じような挙動にするには、何か他の記述が必要でしょうか? ---追記--- アプリのパーミッションはAndroidManifest.xmlに <uses-permission android:name="android.permission.CAMERA" />を追記して、 端末のアプリ情報で「写真と動画の撮影」が付いているのは確認しています。
回答: Monacaで使用しているCordovaのソースコード(Androidのネイティブコード)を確認してみたのですが、Input[Type="FILE"]で呼ばれるメソッド(SystemWebChromeClient.javaのopenFileChooserやonShowFileChooser)で指定されているIntentが ``` android.intent.action.GET_CONTENT ``` として実装されているため、カメラの起動は出来ないようです。(カメラを使いたい時は、`android.media.action.IMAGE_CAPTURE`というインテントを使う) そのため、カメラを起動させたい場合は、カメラプラグインを利用した方が良いと思います。 その場合、カメラプラグインで取得した画像を、そのままinput type="file"に紐づけることは出来ないので、用途に応じて以下のように対応すると良いのではないでしょうか。 1. サーバーに送信するのであればFileTransferプラグインを使用 2. デバイス内に画像を保存するなら、Fileプラグインを使用 3. Ajaxを使いたいのであれば、FormDataオブジェクトを使って実装()