1

カメラインテントから写真を撮った後、「onActivityResult」メソッドからデータを取得する際に問題が発生しました。

これがcameraIntentを呼び出す私のメソッドです:

private void __initCamera() {

    String path = Environment.getExternalStorageDirectory() + "/vault/images/";

    File dir = new File(path);
    if (!dir.exists()) {
        dir.mkdirs();
        dir = new File(path);
    }
    String[] content = dir.list();
    String fileName = (content.length + 1) + ".jpg";
    File file = new File(path, fileName);
    if (!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException ex) {
            Log.e("my_app", ex.getMessage());
        }
    }

    Uri uri = Uri.fromFile(file);  
    Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
    i.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(i, 8765);
}

これが私のonActivityResultメソッドです:

returnCode:-1(should be: 1, right?),

例外:java.io.FileNotFoundException: No content provider: #Intent;action=inline-data;end

data.toURI():#Intent;action=inline-data;end

   @Override
protected void onActivityResult(int requestCode, int returnCode, Intent data) {

    try {

        Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(data.toURI()));
        FileOutputStream out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);
        bitmap.recycle();
        out.close();
    } catch (Exception ex) {
        Log.e("TROLL", ex.toString());
    }
}
4

2 に答える 2

3

これ:

Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(data.toURI()));

これである必要があります:

Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 

少なくとも、それは私が通常画像を取得する方法です。また、すべてを含む例外を使用するのではなく、正しいリクエストコードを確認することをお勧めします。

于 2012-09-18T00:24:20.247 に答える
1

受け入れられた回答は、フルサイズのものではなく、画像のサムネイルを取得する方法のみを提供します。フルサイズの画像を取得するには、カメラが画像を保存する uri を次のように指定する必要があります。

intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);

次に、onActivityResult保存した uri を使用して画像を取得できます。

Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(mUri));

Android のドキュメントはこちらです。

于 2016-07-19T21:28:43.433 に答える