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

  • 相关阅读:
    资料-Java基础:多线程--创建启动线程的多种方式
    资料-Java基础:基础总结-运算符
    资料-Java基础:父子类加载过程
    总结提纲-逐渐补充
    资料-Java基础:类加载处理过程
    资料-Java基础:双亲委派模型
    资料-Java基础:类加载方式及差异
    转载:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
    无法启动IIS Express web服务,端口正在使用!
    关于在本地新建数据库作业,无法成功的问题【本地SQLSERVER链接的服务器数据库】
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4741861.html
Copyright © 2011-2022 走看看