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

  • 相关阅读:
    关于TCP中对于ACK报文是否需要确认的理解
    定时器
    几个错误
    C++继承与组合
    Ubuntu18的Redis: 4.0安装
    Ubuntu18.04:MySQL: 5.7安装与卸载并配置远程登录(服务器装Mysql5.7一条龙服务)
    Ubuntu18服务器修改字体大小
    Ubuntu修改系统时间
    Ubuntu18.04防火墙安装关闭开启操作等
    Ubuntu阿里云镜像源配置
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4741861.html
Copyright © 2011-2022 走看看