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()的方法。