0

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_PRIVATEtempFile. すべてが正常に機能し、写真が撮影され、指定された Uri に保存されます。しかし、画像も私のデバイスからのギャラリーに配置されます (私の現在の開発デバイス「HTC Sensation」の場合) (場所は/mnt/sdcard/DCIM/100MEDIA/IMAG00XX.jpg)。画像が 2 回保存されるのはなぜですか? コードでこの場所について言及していませんでした。これは HTC の「機能」ですか、それとも Android カメラはメディア スキャンのためにファイルを 2 回保存しますか?

また、パラメーターを省略してカメラからビットマップを取得しようとしましたMediaStore.EXTRA_OUTPUTが、このコードでは、カメラから親指サイズの画像しか取得していません (フル解像度ではありません)。

私はAndroidカメラについて多くのことを読みましたが、「安全な」方法でカメラから画像を取得する必要があります(他のアプリはカメラから取得したデータを読み取るべきではありません)。写真を撮るために独自のカメラ サーフェスを実装することは既に考えていましたが、このアプローチでは、組み込みのカメラ アプリケーションで既に提供されている多くのもの (フラッシュ、彩度、効果、ズームなど) をコーディングする必要があります。Androidシステムで写真を撮るのは本当に難しいですか?

4

2 に答える 2

1

「安全」にしたい場合は、アプリにカメラ機能を構築します。デバイスにプリインストールされているランダムなカメラアプリが何をするかを確認する方法はありません。彼らはあなたが知らないうちにどこかのサーバーに写真を送っているかもしれません。確実に行うのはそれほど簡単ではありませんが、基本的な機能しか構築できません。それができない場合は、インテントを明示的にする(パッケージ名を指定する)ことにより、画像キャプチャに信頼できる特定のアプリが必要です。もちろん、まだインストールされていない場合は、最初にインストールする必要があります。

于 2012-10-23T03:34:35.737 に答える
0

uと同じ方法でカメラを実装しました。画像を作成し、作成したフォルダーに保存しますが、同時にギャラリーにも画像を保存します。他のアプリもそれを行うかどうかを確認しました。他のアプリでさえそれを行うことがわかりました.HTCだけの問題ではなく、さまざまなデバイスでテストしました.

于 2012-10-23T04:33:31.880 に答える