1

次のコードを次の行の変更に更新しましたが、機能しませんでした:

//Image場所を設定

File file = new File(Environment.getExternalStorageDirectory() + "/Skynet/images/t1.jpg" );

Uri uriTarget = Uri.fromFile(file);

上記のディレクトリに保存したいのですがjpeg、メディアストアを利用しているのでわかりません。これを行うためのヒント。

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class AndroCamera extends Activity {
   private static final int IMAGE_CAPTURE = 0;
   private Button startBtn;
   private Uri imageUri;
   private ImageView imageView;

/** Called when the activity is first created.
 *  sets the content and gets the references to
 *  the basic widgets on the screen like
 *  {@code Button} or {@link ImageView}
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    imageView = (ImageView)findViewById(R.id.img);
    startBtn = (Button) findViewById(R.id.startBtn);
    startBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startCamera();
        }
    });
}

public void startCamera() {
    Log.d("ANDRO_CAMERA", "Starting camera on the phone...");
    String fileName = "testphoto.jpg";
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, fileName);
    values.put(MediaStore.Images.Media.DESCRIPTION,
            "Image capture by camera");
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    imageUri = getContentResolver().insert(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(intent, IMAGE_CAPTURE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK){
            Log.d("ANDRO_CAMERA","Picture taken!!!");
            imageView.setImageURI(imageUri);
        }
    }
}

}

4

1 に答える 1

4

これUriは、使用している がメディア マネージャーからのものであるためです。おそらく、Uri保存先として定義された を使用すると、機能するはずです。ここにヒントがあります:

mImageUri= Uri.fromFile( new File( Environment.getExternalStorageDirectory(),
                        "pic_" + String.valueOf( System.currentTimeMillis() ) + ".jpg" ) );

ここではルートに保存されていますが、ファイルを作成しているので、好きな場所に配置できます。ディレクトリが存在することを確認してください。そうでない場合は作成してください。@Simonが言ったように、外部ストレージに書き込む権限があることを確認してください。

更新 1: 現在、次のようなものがあります。

imageUri = getContentResolver().insert(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

そのため、挿入は画像をMediaStoreテーブルに挿入するだけです...しかし、それが実際に必要な場合は、のData列をオーバーライドする必要がありますMediaStorecontentValues次のようなものを追加します。

values.put( MediaStore.Images.ImageColumns.DATA, fullPath );

テーブルを使用する必要MediaStoreがない場合は、挿入を行う必要ContentValuesがないため、必要ありません。

于 2012-06-06T21:15:21.533 に答える