好的,我正在制作一个Android应用程序,并使用CAPTURE_PIC_REQUEST拍摄照片并将其作为预览图存储在屏幕上。 我想知道如何获得Uri,实际上是因为我打算收集这些信息,保存并稍后访问。 所以我无法想象如何从我刚刚拍摄的照片中获得Uri或path名称。 以下是我正在处理的活动的代码
package com.CS480; import java.io.File; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class AddEx extends Activity { static final int CAMERA_PIC_REQUEST = 1337; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.add); Button camera = (Button) findViewById(R.id.picButton); camera.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ImageView image = (ImageView) findViewById(R.id.returnedPic); image.setImageBitmap(thumbnail); } } }
那么如何从这个图像,我得到的应用程序,我得到的文件位置
据我所知,你可以做这样的事情:
private Uri mImageCaptureUri; public class AddEx extends Activity { static final int CAMERA_PIC_REQUEST = 1337; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.add); Button camera = (Button) findViewById(R.id.picButton); camera.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ImageView image = (ImageView) findViewById(R.id.returnedPic); image.setImageBitmap(thumbnail); String pathToImage = mImageCaptureUri.getPath(); // pathToImage is a path you need. // If image file is not in there, // you can save it yourself manually with this code: File file = new File(mImageCaptureUri.getPath()); FileOutputStream fOut = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); // You can choose any format you want } }
从Android文档关于android.provider.MediaStore.EXTRA_OUTPUT:
Intent-extra的名称,用于指示内容parsing器Uri用于存储请求的图像或video。
你可以尝试获取图像的URI
data.getExtras.get("URI");
但这可能行不通。 你可以做的只是自己保存位图。 看到这个问题的指导如何做到这一点: 保存到位置的位图
当你拍摄你的照片时,你必须把它存储在某个地方来获取图像的位置。
为此,您可以存储到MediaStore:
String result = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", ""); imageFileUri = Uri.parse(result);
试试这个获取图像文件pathforms的位图
public void uploadBitmap(Context mContext, Bitmap bitmap) { String imagePath = null; ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); Uri uri; Cursor cursor = mContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, MediaStore.Images.Media.DATE_ADDED, null, "date_added DESC"); if (cursor != null && cursor.moveToFirst()) { do { uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))); imagePath = uri.toString(); Log.d("pathatka", uri.toString()); break; } while (cursor.moveToNext()); cursor.close(); } }
android文档中有一个定义文件URI的例子,用于在设置图像捕获的Intent时保存输出 。