一、 7.0文件地址传输的问题

异常信息:FileUriExposedException:

android:name="android.support.v4.content.FileProvider"android:authorities="应用报名.fileProvider"android:exported="false"android:grantUriPermissions="true">android:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/>

在res.下的xml文件:

文件名是:file_paths(和清单文件中一致)

xml version="1.0"encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android">name="files_root"path="Android/data/com.lechuang.letaotao/"/>name="external_storage_root"path="."/>

在 传输过程中提供图片地址:

public staticUri getUriForFile(Context context,File file) {

if(context == null|| file == null) {

throw newNullPointerException();}

Uri uri;if(Build.VERSION.SDK_INT>= 24) {

uri = FileProvider.getUriForFile(context,"应用包名.fileProvider",file);} else{

uri = Uri.fromFile(file);}

returnuri;}

打开照相机:

//android 7.0// Uri imageUri = FileProvider.getUriForFile(mContext, "应用包名.fileProvider", file);

// 7.0 以

// Uri uri = Uri.fromFile(file);

//适配7.0和7.0一下的地址Uri imageUri =

getUriForFile(

mContext

,

file)

;Intent intent =

newIntent()

;intent.addFlags(Intent.

FLAG_GRANT_READ_URI_PERMISSION)

;intent.setAction(MediaStore.

ACTION_IMAGE_CAPTURE)

;intent.putExtra(MediaStore.

EXTRA_OUTPUT

,imageUri)

; //把拍照后的图片放在指定的文件intent.putExtra(MediaStore.

EXTRA_VIDEO_QUALITY

,

0)

;startActivityForResult(intent

,

2)

;

相册选择:

Intent intent = newIntent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); //*代表全部startActivityForResult(intent,1);

裁剪图片:

public static voidresizeImage(Uri uri,Activity activity, intrequestCode) {

Intent intent = newIntent("com.android.camera.action.CROP");intent.setDataAndType(uri,"image/png"); //限定图片类型intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //重要 ,权限要求。intent.putExtra("crop","true");

// aspectX , aspectY :宽高的比例intent.putExtra("aspectX",1);intent.putExtra("aspectY",1);

// outputX , outputY : 裁剪图片宽高intent.putExtra("outputX",150);intent.putExtra("outputY",150);intent.putExtra("return-data", true);activity.startActivityForResult(intent,requestCode);}

压缩图片:

private voidshowResizeImage(Intent data) {

Bundle extras = data.getExtras();if(extras != null) {

Bitmap bitmap = extras.getParcelable("data");String path = Uri.fromFile(file).getPath();bitmap =toSmall(bitmap,path);

}

}

压缩处理的具体方法:

public staticBitmap toSmall(Bitmap bitmap,String path) {

intscale = 1;intwidth_tmp = bitmap.getWidth();intheight_tmp = bitmap.getHeight();while(true) {

if(width_tmp / 2< 100|| height_tmp / 2< 100)

break;width_tmp /= 2;height_tmp /= 2;scale *= 2;}

Matrix matrix = newMatrix();matrix.postScale(scale,scale);// 长和宽放大缩小的比例bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix, true);try{

FileOutputStream fileOutputStream = newFileOutputStream(path);try{

bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);} finally{

try{

fileOutputStream.flush();fileOutputStream.close();} catch(IOException e) {

}

}

} catch(FileNotFoundException e) {

e.printStackTrace();}

returnbitmap;}

主界面的处理:

@Overridepublic voidonActivityResult(intrequestCode, intresultCode,Intent data) {

switch(requestCode) {

case1:

if(resultCode != -1) {

return;}

.resizeImage(data.getData(), this,3); //处理从相册返回的信息:break;case2:

if(resultCode != -1) {

return;}

if(PhotoUtil.isSdcardExisting()) { //处理从照相机返回的图片

Uri uriForFile = getUriForFile(mContext,file);resizeImage(uriForFile, this,3); //开始裁剪} else{

Utils.show(mContext,"未找到存储卡,无法存储照片");}

break;case3:

if(data != null) {

showResizeImage(data); // 压缩图片}

break;default:

break;}

super.onActivityResult(requestCode,resultCode,data);}

附 Android6.0 文件和照相机权限申请:

private static final intREQUEST_PERMISSION_CAMERA= 222;private static final intREQUEST_PERMISSION_STORAGE= 333;private voidsetCamear() {

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

intcheckCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CAMERA);if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.CAMERA},REQUEST_PERMISSION_CAMERA);return;}

}

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

intcheckCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.WRITE_EXTERNAL_STORAGE);if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_PERMISSION_STORAGE);return;}

}

}

@Overridepublic voidonRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults) {

switch(requestCode) {

//就像onActivityResult一样这个地方就是判断你是从哪来的。caseREQUEST_PERMISSION_CAMERA:

if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

} else{Utils.show(mContext,"很遗憾你把相机权限禁用了!");finish();}

break;caseREQUEST_PERMISSION_STORAGE:

if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

} else{

// Permission DeniedUtils.show(mContext,"很遗憾你把读取文件权限禁用了!");finish();}

break;default:

super.onRequestPermissionsResult(requestCode,permissions,grantResults);}

}

android 上传头像遇到的问题,Android 7.0 图片剪切问题,选择头像上传相关推荐

  1. ios图片剪切之圆形头像

    1 #import <UIKit/UIKit.h> 2 3 @interface UIImage (NJ) 4 /** 5 * 生成头像 6 * 7 * @param icon 头像图片名 ...

  2. Django之头像实时展示到input框、图片验证码、简单发邮件

    一.以注册功能来看头像实时展示 首先先来写一个简单的页面: <div class="container-fluid"><div class="row&q ...

  3. Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例)

    Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例) 标签: 注册登录Android开发servlet 2017-04-18 20:34  454人阅读  评论(1) ...

  4. 移动端上传大文件到服务器,android上传大文件到服务器地址

    android上传大文件到服务器地址 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...

  5. android上传文件至服务器(android端+服务器端)

    引言:本来android文件上传的博客在网上挺多的,不过好些都只是有前台android端的上传,并没有后台服务器端的接收.而且自己写的时候也确实遇见了一些之前没注意到的地方,写出来也算是给自己提个醒. ...

  6. 微信小程序/网页/app/android等各种bar图标导航图标文章图标标题图标下拉/检索收藏上传客服等图标整理

    在做微信小程序的时候,需要给底部放置图标.但是找了好久都没有找到自己想要的,适合的.后来我就把所有的小程序的图标都看了下.后来想想还是整理出来,方便自己以后用,也方便大家一下.我敢保证有你想要的,适合 ...

  7. Android实现换发型功能,实现一个Android中更换头像功能

    实现一个Android中更换头像功能 本文原创,转载请经过本人准许 写在前面: 更换头像这个功能在用户界面几乎是100%出现的.通过拍摄照片或者调用图库中的图片,并且进行剪裁,来进行头像的设置. 功能 ...

  8. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)

    在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...

  9. Android群英传笔记——第十章:Android性能优化

    Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...

最新文章

  1. 惊!!!CV界的BERT要来了?准确率提高近25%!
  2. 水星逆行,诸事不宜,瞬间爆炸。
  3. C 语言中结构体强制转换--实验
  4. Javascript的IE跟Firefox(火狐)兼容性-转
  5. 常见的社会潜规则有哪些?
  6. 2013计算机视觉代码合集一
  7. java jsp导出pdf文件_JSP页面导出PDF格式文件
  8. PHP错误类型及屏蔽方法
  9. Python将函数作为闭包
  10. 干货:不同场景容器内获取客户端源IP的方法
  11. SQLite第九课 sqlite3_set_authorizer案例
  12. java经典算法(六)---zws
  13. 此加载项为计算机上的所有用户安装但只能,win7系统控件无法安装的解决方法...
  14. idea关闭自动更新
  15. Windows Server2012 安装升级补丁更新
  16. 从三个维度分析DeFi连环清算问题的解决方案 | 链捕手
  17. Qt5学习之路及嵌入式开发教程1:信号槽例子
  18. centos 安装gcc9及配置
  19. 【读书笔记】《利用Python进行数据分析》第2版_第六章 数据载入、存储及文件格式
  20. Gzip Zlib PNG 压缩算法【转】

热门文章

  1. ASP.NET服务器控件数据绑定总结
  2. linux nc命令用法举例
  3. Linux nginx搭建文件服务器
  4. Python Django后台管理模板美化:使用django-simpleui模块
  5. zk的数据目录:`version-2`
  6. ubuntu/deepin常用软件清单(都是使用sudo apt-get install安装方式)
  7. vshpere esxi6.7安装
  8. 大数据容器化-基于Kubernetes(k8s)构建spark运行环境
  9. C语言指针:定义,使用及计算指针大小
  10. 【代码】CyclicBarrier栅栏使用示例