用CSDC好长时间了,自己也积累了一些经验,以后有时间就分享给大家,现在先说一下最近遇到的一个问题,android手机拍照后,相册不显示,展示到listView时不按时间降序排列的问题。某些手机会出现调用系统相机拍照后会出现旋转90的情况,例如三星的某些手机,
picturePath为图片保存路径,在拍照返回的onActivityResult中调用如下方法即可。
- int degree = getPicRotate(picturePath);
-
- if (degree != 0) {
- Matrix m = new Matrix();
- m.setRotate(degree); // 旋转angle度
- int width = bitmap.getWidth();
- int height = bitmap.getHeight();
- bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,
- m, true);// 重新生成图片
- water_img = wCamera.createBitmap(bitmap);
- }
-
- public int getPicRotate(String path) {
- int degree = 0;
- try {
- ExifInterface exifInterface = new ExifInterface(path);
- int orientation = exifInterface.getAttributeInt(
- ExifInterface.TAG_ORIENTATION,
- ExifInterface.ORIENTATION_NORMAL);
- switch (orientation) {
- case ExifInterface.ORIENTATION_ROTATE_90:
- degree = 90;
- break;
- case ExifInterface.ORIENTATION_ROTATE_180:
- degree = 180;
- break;
- case ExifInterface.ORIENTATION_ROTATE_270:
- degree = 270;
- break;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return degree;
- }
-
-
下面来说一下拍照后插数据库的问题
- ContentValues values = new ContentValues();
- ContentResolver resolver = this.getContentResolver();
- values.put(MediaStore.Images.ImageColumns.DATA, picturePath);
- values.put(MediaStore.Images.ImageColumns.TITLE,
- picturePath.substring(picturePath.lastIndexOf("/") + 1));
- values.put(MediaStore.Images.ImageColumns.DATE_TAKEN,
- System.currentTimeMillis());
- values.put(MediaStore.Images.ImageColumns.MIME_TYPE,
- "image/jpeg");
- resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- values);
这样相册中就可以查看到了