标签:
1、android很多应用会调用照相机功能,比如拍照上传用户图像等等,不多说,下面上传简单的demo:
public class MainActivity extends Activity {//ActionBarActivity
private Uri uriSavedImage;
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image=(ImageView) findViewById(R.id.image);
}
public void start(View v)
{
Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
imagesFolder.mkdirs();
// System.out.println(Environment.getExternalStorageDirectory());
File imagefile = new File(imagesFolder, "image_001.jpg");
uriSavedImage = Uri.fromFile(imagefile);
//mediaStore.EXTRA_OUTPUT参数是向系统摄像机提交存储的请求,uriSAvedImage是存储的
//uri即具体存储位置,和名称。系统相机会先 查看第一个参数,如果为空则存储到相机默认位置
//,不为空则根据uri存储到程序指定的位置
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(imageIntent,0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// image.setImageURI(uriSavedImage);
System.out.println(uriSavedImage.toString());
String stringUri=uriSavedImage.toString();
int index=stringUri.indexOf("//");
String path=stringUri.substring(index+2, stringUri.length());
System.out.println(path);
File f=new File(path);
Bitmap bmp=null;
try {
bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.fromFile(f));
} catch (Exception e) {
e.printStackTrace();
}
image.setImageBitmap(bmp);
super.onActivityResult(requestCode, resultCode, data);
}
注意:的是ImaeView的setImgeUri和setImageDrawable都会为ImageView创建一个数据缓存,如果第二次调用这个方法时候就会设置成缓存数据里的图像,因此用户在对第一次拍的不满意时,想重新拍摄的时候总显示第一次拍的图像。
因此解决方法:
1、用不同的uri,即文件名不同,太麻烦且占空间不可取。
2、采用直接设置图片的方式,如上面代码中一样,采用setImageBitmap()的方法。
标签:
原文地址:http://www.cnblogs.com/bokeofzp/p/4741861.html