一、调起相机

  • 所需权限有:相机权限(android.permission.CAMERA),文件存取权限(android.permission.WRITE_EXTERNAL_STORAGE、android.permission.READ_EXTERNAL_STORAGE)

public static File openCamera(Activity context) {
File cameraSavePath = new File(Environment.getExternalStorageDirectory().getPath()
+ File.separator + Environment.DIRECTORY_DCIM + “/Camera/” + System.currentTimeMillis() + “.jpg”);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context, context.getPackageName() + “.fileProvider”, cameraSavePath);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
uri = Uri.fromFile(cameraSavePath);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
context.startActivityForResult(intent, 1);
return cameraSavePath;
}

二、调起相册

  • 所需权限有:文件存取权限(android.permission.WRITE_EXTERNAL_STORAGE、android.permission.READ_EXTERNAL_STORAGE)

public static void openAlbum(Activity context) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, “image/*”);
context.startActivityForResult(intent, 2);
}

三、裁剪图片

public static Uri startCrop(Activity context, Uri uri) {
Intent intent = new Intent(“com.android.camera.action.CROP”);
intent.setDataAndType(uri, “image/*”);
intent.putExtra(“circleCrop”, true);
intent.putExtra(“scale”, true);
intent.putExtra(“aspectX”, 1);
intent.putExtra(“aspectY”, 1);
intent.putExtra(“outputX”, ScreenHelper.dp2Px(context, 60));
intent.putExtra(“outputY”, ScreenHelper.dp2Px(context, 60));
intent.putExtra(“return-data”, false);//是否以 Bitmap形式返回(存在内存中,过大时可能会 OOM)
File outFile = new File(Environment.getExternalStorageDirectory().getPath()
+ File.separator + Environment.DIRECTORY_DCIM + “/Camera/crop_” + System.currentTimeMillis() + “.jpg”);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
Uri out = Uri.fromFile(outFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, out);//裁剪后输出路径(保存)
intent.putExtra(“outputFormat”, Bitmap.CompressFormat.JPEG.toString());
context.startActivityForResult(intent, 3);
return out;
}
//注意:裁剪后的文件输出URI 只用Uri.fromFile(outFile)即可

四、调起系统页面后的回调:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//相机回调
if (requestCode == 1 && resultCode == RESULT_OK) {
File cameraSavePath = cameraFile;
Uri uri;
//适配 7.0及以上系统
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, getPackageName() + “.fileProvider”, cameraSavePath);
} else {
uri = Uri.fromFile(cameraSavePath);
}
mCropUri = startCrop(this, uri);
} else if (requestCode == 2 && resultCode == RESULT_OK) {
//相册回调
if (data != null)
mCropUri = startCrop(this, data.getData());
} else if (requestCode == 3 && resultCode == RESULT_OK && mCropUri != null) {
//裁剪后
File file = new File(mCropUri.getEncodedPath());
String photoPath;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
photoPath = String.valueOf(file);
else
photoPath = Uri.fromFile(file).getEncodedPath();
uploadHeader(photoPath);
}
}

五、上传头像

  • 使用的是 Retrofit框架

public void uploadHeader(String filePath) {
File file = new File(filePath);
RequestBody id = RequestBody.create(MediaType.parse(“multipart/form-data”), SpUtil.getCustomerId(mContext));
RequestBody requestBody = RequestBody.create(MediaType.parse(“image/jpg”), file);
MultipartBody.Part part = MultipartBody.Part.createFormData(“file”, file.getName(), requestBody);

}

@Multipart
@POST(Api.uploadHeadImg)
Call uploadHeadImage(@Part(“id”) RequestBody id, @Part() MultipartBody.Part file);

android开发之上传头像相关推荐

  1. 自制app(游戏)Please Go之上传头像篇----萌新成长之路

    自制app(游戏)Please Go之上传头像篇 最近在自己开发一个自己想出来的游戏(大家可以猜猜是一款什么游戏~),想一边学习一边巩固,所以在这里把项目里面用到的功能分模块写在博客里面.希望有些地方 ...

  2. java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...

    java微信开发之上传下载多媒体文件,java上传下载 回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务 ...

  3. Subtext v2.0 定制化开发之上传文件File Upload管理

    Subtext v2.0 定制化开发之上传文件File Upload管理 Subtext / EntLib.com Blog 博客后台随笔内容编辑采用最新的FCKEditor 编辑器,可以用来上传图片 ...

  4. Android kotlin上传头像实现

    Android 上传头像基本上是每个app都有的功能,虽然看起来简单,但是作为新手的我实现起来却没有那么简单,实现如下 从相册获取照片,代码如下 //从相册获取照片private fun getFro ...

  5. android mysql上传头像,Android自定义控件仿QQ编辑和选取圆形头像

    android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形. 首先我们要做一个处理图片的自定义控件,把传入的图片,经过用户选择区域,处理成一定的形状. 有的app是通过 ...

  6. Android开发之用户头像上传

    一,概述 本篇博客总结一下自己在开发过程中应用到的一些知识,在本篇博客中带领大家完成用户头像选择或者拍照上传,并对图片进行大小的压缩,和形状的控制,可以将用户选择到的图片裁剪成圆形上传. ok,我们开 ...

  7. android 快传 源码_最新安卓仿茄子快传APP源码包括服务端源码Android开发快传类项目源码全套...

    适使用范围:  安卓APP茄子快传源码 Android项目源码相似茄子快传的快传项目包括服务端 运行环境:  Android app 源码详细: 本项目是一个基于安卓的相似茄子快传的项目源码,包括安卓 ...

  8. python自动化上传图片_接口自动化之Python3_Requests之上传头像

    工作中经常会遇到比如上传文件的接口,那么遇到这些接口该如何处理呢? 今天我们来给大家举个例子: 比如我们要上传一张编测编学论坛用户头像的照片: 正常手工流程: 1.鼠标挪动到右上角用户头像,浮窗里点击 ...

  9. android开发之 - 圆形头像

    //最新第三方圆形头像: https://github.com/hdodenhof/CircleImageView https://github.com/MostafaGazar/CustomShap ...

最新文章

  1. 三星a5009Android6.0,三星A5009原版系统刷机包_三星A5009最新升级包线刷包和root
  2. php 公共的 受保护的,php-不使用$this-gt;调用受保护的属性
  3. 定义zabbix_action报警通知模板
  4. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
  5. Ajax的用法之JQuery
  6. SpringMVC+Mybatis基础知识和配置
  7. GoldenGate SQL error 1403 mapping 错误解决方案
  8. Java怎么去最高分最低分,深入java虚拟机:原子操作ParkEvent和Parker
  9. matlab脑电信号特征提取,一种脑电信号实时特征提取方法与流程
  10. 龙虎斗 详解(C++)
  11. js数组再倒数第二个添加元素_js 循环对象数组将元素逐个添加至新数组问题
  12. 收银系统连接不上数据服务器,收银系统服务器数据库
  13. 微信PC版的API接口
  14. Unity经验分享——如何实现黑洞吸附效果
  15. 京东java面试流程_java京东社招面试经历
  16. grub4dos引导启动linux,grub4dos中怎么样调用syslinux引导
  17. 《植物大战僵尸(PC)》游戏评测
  18. 管理工具 QTTabBar
  19. 从Bitly构建分布式系统中吸取的教训
  20. html中的圆周率如何调用,谁算出来的圆周率

热门文章

  1. 计算机默认应用程序怎么取消,如何取消默认打开的QQ浏览器
  2. p2197 nim游戏
  3. Excel中Chart对象成员表
  4. c1科目三灯光全语言播报,驾照科目三灯光模拟考试语音提示
  5. 行业说 | 建筑业面临失宠,越来越留不住年轻人?原因在这
  6. mybatis报错 Invalid bound statement (not found)
  7. jQuery带缩略图轮播效果图片切换带缩略图
  8. 哈工大操作系统学习笔记十——信号量与死锁
  9. matlab图加上箭头和标注实例
  10. 6月楼市或迎降价潮 房企策略有调整