zoukankan      html  css  js  c++  java
  • Camera学习,调用系统摄像机上传图片。

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

  • 相关阅读:
    2040 打开所有的灯
    1323 删数问题(加强版)
    1087 FBI树
    1030 求先序排列
    1743 矩阵Ⅲ
    svn更新时,出现不知道这样的主机的解决方案
    用jquery或js获取select标签中选中的option值及文本
    html页面中的button按钮会自动提交form表单的问题以及解决方案
    localStorage与sessionStorage的使用和区别
    命令行mvn打包
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4741861.html
Copyright © 2011-2022 走看看