当我们点击头像想要进行头像上传时,我们可以给上传头像设置一个弹框效果,用来给用户提供相册选择和拍照两种选择。
这时我们可以使用PopupWindow实现

1. 定义图片存储位置

 public void saveImage(Bitmap bitmap) {String state = Environment.getExternalStorageState();if (!state.equals(Environment.MEDIA_MOUNTED)){return;}FileOutputStream stream = null;try {stream = new FileOutputStream(Environment.getExternalStorageDirectory() + "/hear.jpg");bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);stream.flush();stream.close();} catch (Exception e) {e.printStackTrace();}}

2. 打开相册

     Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);photoPickerIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);

3. 打开系统相机

 private void getPicFromCreame() {//先初始化出相机拍完照片后的存放路径tempFile = new File(Environment.getExternalStorageDirectory().getPath(), System.currentTimeMillis() + ".jpg");//跳转到调用系统相机(跳转系统相机用到的是intent隐式意图来进行跳转)Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//跳转前需要对当前的Android版本进行判断,因为Android6.0以上的版本需要权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build());if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {builder.detectFileUriExposure();}} else {//否则使用Uri.fromFile(file)方法获取Uriintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));}startActivityForResult(intent, CAMEAR_REQUEST_CODE);}

4. 裁剪

 public void cropPhoto(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");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);startActivityForResult(intent, 3);}

5. 在框架上进行上传

 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent intent) {//        super.onActivityResult(requestCode, resultCode, data);super.onActivityResult(requestCode, resultCode, intent);switch (requestCode) {case CAMEAR_REQUEST_CODE://调用系统相机后返回if (resultCode == RESULT_OK) {//用相机返回的照片去调用剪裁也需要对Uri进行处理if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {Uri contentUri = FileProvider.getUriForFile(this, "com.bw.movie", tempFile);cropPhoto(contentUri);} else {cropPhoto(Uri.fromFile(tempFile));}}break;case ALBUM_REQUEST_CODE://调用系统相册后返回if (resultCode == RESULT_OK) {Uri uri = intent.getData();cropPhoto(uri);}break;case CROP_REQUEST_CODE:Bundle bundle = intent.getExtras();if (bundle != null) {//在这里获得了剪裁后的Bitmap对象,可以用于上传Bitmap image = bundle.getParcelable("data");//设置到ImageView上pic.setImageBitmap(image);Log.e("TAG","Bit=="+image.toString());//也可以进行一些保存、压缩等操作后上传saveImage(image);File file = new File(Environment.getExternalStorageDirectory() + "/hear.jpg");getPresenter().headpic(file);}break;}}

总结:

  • 当我们进行拍照时,有些模拟器可能会因为版本太高从而导致无法打开摄像头,这时问题出在Android7.0权限处理问题,我们可以进行权限添加,点击—>https://www.jianshu.com/p/70c34d7148d4

Android 头像上传的实现相关推荐

  1. Android头像上传实战模拟

    Android头像上传实战模拟 在开发中头像的上传应该是必不可少的,话不多说上效果图! 点击头像弹出PopupWindow分别三个按钮. <?xml version="1.0" ...

  2. Android 头像上传

    内容概要 实例演示和原理讲解 从摄像头中获取图像 从图库中获取图像 在Android上对图像进行裁剪 图像上传并在服务器保存图像 实例演示和原理讲解 头像上传流程 从摄像头中获取图像 本课时的主要内容 ...

  3. Android头像上传--图片转base64,后台接收到的总是null问题

    图片转base64,后台接到为null问题 项目中,在使用头像上传的时候,将图片转为base64,后台总是收到的base64字符串是null.原以为是图片未压缩,导致图片过大,超过了Tomcat配置的 ...

  4. Android 头像上传

    第一步:权限和依赖 <uses-permission android:name="android.permission.INTERNET" /><uses-per ...

  5. Android头像上传时裁剪图片过大问题,裁剪大图片导致

    原先在完成头像上传功能的时候复制网上写好的代码,虽然也仔细研究过实现的过程但是这次项目中却遇到了一个很不解的问题,使用乐视手机实现图片裁剪的那一步骤中由于图片太大手机性能不够导致图片无法裁剪报出错误 ...

  6. 调用android的拍照或本地相册选取再实现相片上传服务器,Android调用系统相机、本地相册上传图片(头像上传(裁剪)、多张图片上传)...

    开发中基本上都会有头像上传的功能,有的app还需要多张图片同时上传,下面简单将头像上传以及多张图片上传功能整理一下.图片选择仿照微信选择图片的界面.[参考] 多图片选择器 !!!推荐一个动态权限请求的 ...

  7. Android kotlin上传头像实现

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

  8. android自定义头像上传,android裁切图片之用于头像上传

    嘛话都不说,直接贴代码,也是在网上找的代码copy出来的! 页面代码 encoding="utf-8"?> android:orientation="vertica ...

  9. android 华为裁剪全图,华为手机头像上传裁剪操作 报错

    华为手机头像上传操作, 裁剪点存储--进入裁剪后--点确定, 就直接报错退出程序了,其他机型测都是成功的,求大神指教 报错代码 @Override protected void onActivityR ...

最新文章

  1. ML Pipelines管道
  2. 微信小程序全局监听路由变化
  3. vs2013我建了两个对话框 选择主对话框_VS/MFC编程教程:如何创建对话框模板和修改对话框属性...
  4. dubbo启动顺序问题
  5. Vue.js 单文件组件
  6. ZooKeeper:win7上安装单机及伪分布式安装
  7. [集合]线程安全的HashMap
  8. C语言运行gis空间叠加分析,GIS空间叠加分析与缓冲区分析.doc
  9. python连接mysql的操作
  10. HttpComponents之httpclient基本使用方法
  11. github【如何删除一个repository(仓库)】
  12. fastdfs 配置文件详解
  13. pandas某一列去重获取唯一值
  14. 文件扩展名(后缀名)是什么?win10怎么显示扩展名?
  15. 计算机网络面试需要掌握的知识点汇总
  16. linux系统下安装中文字体步骤
  17. VMware安装CentOS 7.0 Fail to start media check on /dev/sr0
  18. 文化网,武汉文化网,湖北文化网——炎黄文化常识
  19. MATLAB2016a启动慢
  20. 机器人编程要学c语言吗,小孩学机器人编程入门学什么

热门文章

  1. L160. 相交链表
  2. HBase(6):HBase优化
  3. Next.js图片使用
  4. 【php】foreach和多维数组
  5. Flex布局——flex-basis、flex-grow、flex-shrink
  6. webpack的构建流程
  7. Tomcat集成eclipse
  8. Python OpenCV putText() 在图像中放置文本
  9. 如果你只知道开心网,那你就OUT了。。。。。
  10. oracle12c rac重启,Oracle12.2 RAC其中一个节点重启