MediaStore.ACTION_IMAGE_CAPTURE
写真をキャプチャする目的で Android カメラを呼び出す「安全な」方法はありますか? 次のコードを使用して、カメラからスナップショットを取得しています。
Uri tempFile = Uri.fromFile(tempFile()); // returns a temporary stored files that is "Context.MODE_WORLD_WRITEABLE" so that android can put the file in this location
// tempFile looks like: file:///data/data/com.example.myapp/files/temp_picture.jpg
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, tempFile);
startActivityForResult(camera, Constants.REQUESTCODE_PICTURE_RESULT);
その後 (カメラ " RESULT_OK
" から戻って) tempFile を保護されたアプリケーション ストアにコピーしContext.MODE_PRIVATE
、tempFile
. すべてが正常に機能し、写真が撮影され、指定された Uri に保存されます。しかし、画像も私のデバイスからのギャラリーに配置されます (私の現在の開発デバイス「HTC Sensation」の場合) (場所は/mnt/sdcard/DCIM/100MEDIA/IMAG00XX.jpg
)。画像が 2 回保存されるのはなぜですか? コードでこの場所について言及していませんでした。これは HTC の「機能」ですか、それとも Android カメラはメディア スキャンのためにファイルを 2 回保存しますか?
また、パラメーターを省略してカメラからビットマップを取得しようとしましたMediaStore.EXTRA_OUTPUT
が、このコードでは、カメラから親指サイズの画像しか取得していません (フル解像度ではありません)。
私はAndroidカメラについて多くのことを読みましたが、「安全な」方法でカメラから画像を取得する必要があります(他のアプリはカメラから取得したデータを読み取るべきではありません)。写真を撮るために独自のカメラ サーフェスを実装することは既に考えていましたが、このアプローチでは、組み込みのカメラ アプリケーションで既に提供されている多くのもの (フラッシュ、彩度、効果、ズームなど) をコーディングする必要があります。Androidシステムで写真を撮るのは本当に難しいですか?