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

  • 相关阅读:
    lxml库
    requests库基本使用
    Xpath Helper的使用
    Class.forName()的作用(转)
    JDBC 连接数据库
    IDEA 的 Othere Settings(Default settings)消失了?(转)
    servletContext.getRealPath(String)作用(转)
    MySQL中插入相关
    MyBatis 中错误信息详情、原因分析及解决方案
    Java 的全限定类名
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4741861.html
Copyright © 2020-2023  润新知