android拍照裁剪修改头像
来源:互联网 发布:黑龙江优化发展环境 编辑:程序博客网 时间:2024/06/05 08:47
新年伊始
2017年的第一天,决定来一个好的开始撸一发,因为在做的项目最近遇到了修改头像这部分,所以这篇文章主要谈一下我遇到的7.0适配问题
github:https://github.com/icuihai
文章背景
1。相信我们日常生活中遇到的app都有修改头像这一部分把,基本上就是拍照和从相册选取裁剪这两部份
一般启动系统自带的相机基本就是以下几行代码
public void showCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); if (!file.getParentFile().exists()) file.getParentFile().mkdirs(); if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {//适配4.4 mUri = Uri.fromFile(file); } else { mUri = FileProvider.getUriForFile(this, "com.cuihai.headphoto.provider", file);//适配7.0 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri); startActivityForResult(intent, ACTION_CAMERA_OK); }7.0适配首先说明以下,在调用系统相机这部分,android4.4要特别注意以下,因为url取的方式跟其他版本是不一样的,它是直接通过我们设置的文件路径取出,7.0版本的是通过FileProvider,这里怎么做呢?1,首先在清单文件里面注册下代码如下:、
// 7.0文件系统 <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.cuihai.headphoto.provider" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>
这里需要注意的是exported设置为false,设置为ture会报安全异常,granturipermissions表示授予临时访问权限2,在资源文件res目录下新建xml文件代码如下
<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="files_root" path="Android/data/com.cuihia.headphoto/" /> <external-path name="external_files" path="" /></paths>裁剪部分
/裁剪 public void startPhotoZoom(Uri uri) { Intent crop = new Intent("com.android.camera.action.CROP"); crop.setDataAndType(uri, "image"); crop.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//适配7.0 // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 crop.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 crop.putExtra("aspectX", 1); crop.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 crop.putExtra("outputX", 300); crop.putExtra("outputY", 300); crop.putExtra("return-data", false); startActivityForResult(crop, ACTION_CROP_OK); }相册部分
private void showPhoto() { Intent photo = new Intent(Intent.ACTION_PICK, null); photo.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(photo, ACTION_PHOTO_OK); }回掉部分
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //相册 if (requestCode == ACTION_PHOTO_OK && resultCode == RESULT_OK) { if (data != null) { mUri = data.getData(); startPhotoZoom(mUri); } } //相机 if (requestCode == ACTION_CAMERA_OK && resultCode == RESULT_OK) { // 设置文件保存路径 if (mUri != null) { startPhotoZoom(mUri); } }//裁剪 if (requestCode == ACTION_CROP_OK && resultCode == RESULT_OK) { if (mUri != null) { setImg(mUri); } } }
我们所使用传值都是通过url实现的,这是一种比较好的解决方式,当然可以直接使用data,但是对于一下低端手机可以会出现崩溃的情况(并没有测试),6.0权限部分的代码我会放在github上面,放在这里比较占空间~~~ 遗留问题 因为项目中这部分还没有结束,所以这部分代码并没有写完,还有一个bug就是小米魅族部分手机会出现闪退的情乱,这是以为他们底层更改了代码,在调用相机之后把原来的activity给销毁掉了 ,导致返回过来的值没有使用,会报空值针,当然本片文章会更新的,这篇文章并没有gif或者图片,因为这个效果大家都知道的,如果觉得这篇文章对你有用请在github上给个赞,如果觉得文章有错误或者不理解的也请提出来大家一起讨论~~
github地址:点击打开链接
0 0
- android拍照裁剪修改头像
- android头像选择(拍照,相册,裁剪)
- android头像选择(拍照,相册,裁剪)
- android头像相册/拍照选取,裁剪及上传综合案例
- android头像相册/拍照选取,裁剪及上传综合案例
- Android 头像选择(拍照、相册裁剪),含7.0的坑
- Android 头像(拍照,相册)选择后裁剪功能
- 拍照/选择图库头像/裁剪
- Android7.0 头像 拍照、照片裁剪
- 个人中心--圆形头像--拍照--裁剪
- Android高仿微信头像裁剪
- android裁剪圆型头像
- android裁剪头像上传
- Android头像--拍照上传
- android studio 适配android7.0 android 6.0拍照调用系统裁剪工具实现头像上传功能
- Android拍照和裁剪
- Android开发之头像上传(包含拍照,从相册选择图片,裁剪等)
- Android 调用系统拍照及相册裁剪后作为头像,兼容到5.0
- SpringBoot使用笔记
- selenium+python京东自动登录及秒杀
- 操作系统算法 之 文件系统设计
- 一次编译和部署环境不一致导致的问题
- malloc free 与 new delelte的区别
- android拍照裁剪修改头像
- 递推数列
- mysql 相关字符集讲解
- Android事件总线(四)源码解析otto
- android 外部存储创建文件夹总是返回false的问题
- HttpURLConnection----Android网络编程
- 求几何形状的面积之和
- Maven学习笔记之坐标和依赖
- 高并发服务解决套路