用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);
这样相册中就可以查看到了