1

ユーザーが安全なドキュメントの画像をキャプチャし、それらの画像をサーバーにアップロードできるようにするアプリを開発しています (私がやろうとしていることの良い例は、ユーザーが小切手の写真を撮ることができる銀行アプリです)。

セキュリティ上の理由から、可能な限りイメージを物理的にディスクに保存したくありません。

MediaStore.ACTION_IMAGE_CAPTURE インテントでこれを実行しようとすると、機能しますが、解像度が非常に低くなります。これはRAMの使いすぎを防ぐためだと思います。解決策を探してみましたが、見つかったものはすべて、SD カードまたは内部 NAND ストレージにイメージを保存するものでした。私はそれをしたくありません。

写真の保存を避けることができない場合、自分のアプリだけがアクセスできる場所に画像を保存する方法はありますか? アップロード後にファイルを削除します。このようにしなければならない場合、写真を暗号化して保存する方法はありますか?

これが役立つ場合に備えて、現在のコードを簡略化したものです。

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent,requestCode);

protected void onActivityResult(int requestCode, int resultcode, Intent data)
{
    if (resultcode == RESULT_OK)
    {
        Bitmap bmp = getBitmapFromIntent(data);
    }
}
private Bitmap getBitmapFromIntent(Intent intent)
{
    Bundle extras = intent.getExtras();
    return (Bitmap) extras.get("data");
}
4

1 に答える 1

2

デバイスの内部ストレージにファイルを直接保存できます。デフォルトでは、内部ストレージに保存されたファイルはアプリケーション専用であり、他のアプリケーションはそれらにアクセスできません(ユーザーもアクセスできません)。ユーザーがアプリケーションをアンインストールすると、これらのファイルは削除されます。

String file_path = "/data/data/com.packagename/cache/";
            File dir = new File(file_path);
            if (!dir.exists())
                dir.mkdirs();
            File file = new File(dir, "1" + ".jpg");

            try {
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(data); // data in byte format
                fos.close();
            } catch (FileNotFoundException e) {
                Log.e("Not Found", "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.e("Not Found", "Error accessing file: " + e.getMessage());
        }
于 2012-10-31T18:37:59.380 に答える