码迷,mamicode.com
首页 > 其他好文 > 详细

Camera学习,调用系统摄像机。

时间:2015-08-19 13:20:08      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

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

Camera学习,调用系统摄像机。

标签:

原文地址:http://www.cnblogs.com/bokeofzp/p/4741861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!