Android解决部分机型获取不到系统拍照图片,图库图片问题的解决
来源:互联网 发布:淘宝宠物用品店铺介绍 编辑:程序博客网 时间:2024/05/01 18:06
1.前言
现在的APP中,获取手机图片,或是拍照已经是必不可少的了,例如更好头像,还有就是类似QQ控件,或是朋友圈上传图片,视频等!但是Android由于各个手机厂商对系统都有不同的更改,以及Android4.4前后获取路径的差别,以至于在各个品牌的手机,以及各个Android系统之间需要适配,这个工作比较麻烦,这里是本人对各个品牌以及不同呢Android版本出现问题进行的总结之后抽出来的工具类,可以值以后的开发中直接使用,如果有测出什么品牌的手机有问题,可以联系我,我尽快优化解决没有适配的手机,谢谢。这里是打算实现视频所有手机的获取系统图片,视频,以及拍照的工具类,
2.实现思路
这里是通过本人在开发中,遇到部分机型获取不到图库图片,或是拍照图片出问题的,主要有以下几个方面,代码都是实战原码,解决大部分机型的问题,如还有部分机型不能解决,请联系我,我将尽快完善,谢谢!
①拍照和摄像的时候,可以给他指定一个存放的路径,这样不管在任何手机中,我们只要获取到这个路径中的文件就可以了,所以也不需要管其他的问题,都可以获取到图片路径以及图片。
②在Android4.4前后返回来的Uri获取的路径一个是真实路径,一个不是真实路径,所以需要将Android4.4之后返回来的Uri转换成真实路径。
③在调用系统裁剪的时候,有可能会压缩图片,或是失真,这里也是给裁剪设置一个输出路径,一个不要设置图片格式为JPEG,这样很可能会出现失真现象。
④还有部分手机拍照之后,可能出现图片旋转,这是就需要将图片旋转回来再进行上传和显示。
⑤通过activityresult获取的图片有可能会被压缩,可以通过指定路径的Uri获取到原图。
3.实现代码
/**
* 获取图片,视频原文件的Uri
* 设置保存图片,视频的路径,返回一个Uri
* @return
*/
public static Uri getFilePath(boolean isVideo) {
Uri fileUri = null;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判断SD卡是否存在
String filepath = Environment.getExternalStorageDirectory() + "/EvenTest/camera/";//用来存放图片视频路径
File file = new File(filepath);
if (!file.exists()) {
file.mkdirs();
}
if (isVideo) {
fileUri = Uri.fromFile(new File(file, "eventest.mp4"));
} else
fileUri = Uri.fromFile(new File(file, "eventest.png"));
return fileUri;
}
return null;
}
②判断是否需要旋转以及旋转角度
/**
* 获取拍摄的文件有没有选择角度
*
* @param path
* @return
*/
public static int getFileDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);//获取指定路径的文件Exif信息
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;
}
/**
* 将bitmap进行旋转相对应的角度
*
* @param bitmap
* @param degree
* @return
*/
public static Bitmap getRotateBitmap(Bitmap bitmap, int degree) {
//使用矩阵旋转角度
Matrix matrix = new Matrix();
matrix.postRotate(degree);
//获取旋转后的图片
Bitmap rtBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (rtBitmap == null) {
rtBitmap = bitmap;
}
if (bitmap != null && bitmap != rtBitmap) {
bitmap.recycle();
}
return rtBitmap;
}
③获取Android4.4以上的路径
/**
* 解决在Android4.4以上获取路径的方法,通过Uri.getPath()获取的路径是有问题的
*
* @param contentURI
* @return
*/
public static String getRealPathFromURI(Context context, Uri contentURI) {
String result;
Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
// Source is Dropbox or other similar local file path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
4.项目demo:GitHub地址
- Android解决部分机型获取不到系统拍照图片,图库图片问题的解决
- 解决华为手机获取不到图库图片的路径问题
- 解决android部分机型拍照后被旋转的问题
- Android 解决部分手机拍照后获取的图片被旋转的问题
- android解决三星手机拍照获取图片的问题
- 解决Android 4.4 系统图库选择图片问题
- 史上最全选择本地图片和拍照上传,超简单解决获取不到图片问题
- 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)
- 手机拍照获取不到图片?<部分手机>
- Android 获取系统图库的图片
- Android自定义拍照解决部分手机拍完之后图片不清楚的问题
- android 拍照的图片保存到系统图库
- Android 拍照获取图片和图库获取图片
- 一站式解决,Android 拍照 图库的各种问题
- Android调用系统拍照获取图片问题
- 获取拍照图片、获取图库图片、共享View的截图
- android拍照后图片路径的获取(解决不同手机存在拍照后旋转的问题)
- 解决通过Intent调用系统拍照程序,返回图片太小的问题[android]
- 谷歌地图路线规划去掉自带的AB图标
- 详解Java的Hibernate框架中的缓存与原生SQL语句的使用
- 如何使版面富有节奏感
- Oracle数据库学习笔记(一)之单行函数
- [substence designer]最近做的几个PBR材质
- Android解决部分机型获取不到系统拍照图片,图库图片问题的解决
- bzoj2705: [SDOI2012]Longge的问题
- 教你学会怎样编辑操作PDF文件
- bzoj 1458 最大流
- java 文件操作工具类
- iOS pop动画的入门使用
- [poj]3187 Backward Digit Sums [dfs]
- Android性能调优工具TraceView介绍
- 102. Binary Tree Level Order Traversal