Android调用系统相册或拍照实现头像更换

更换头像功能相信每个app,都会用到,这里我也做下总结,记录下。

我这里是将代码从项目中抽取出来,难免可能会涉及到mvp相关的名词,谅解。

1、展示更改头像选择对话框:

@Overridepublic void showModifyHeadIconDialog() {    AlertDialog.Builder builder = new AlertDialog.Builder(this);    final AlertDialog dialog = builder.create();    //加载对话框布局    View view = View.inflate(this, R.layout.personal_modifyhead_dialog, null);    dialog.setView(view, 0, 0, 0, 0);// 设置边距为0,保证在2.x的版本上运行没问题    dialog.show();    //AutoRelativeLayout为鸿洋的百分比布局    AutoRelativeLayout rl_photograph = (AutoRelativeLayout) view.findViewById(R.id.rl_photograph);    rl_photograph.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //选择从相册            presenter.modiftHeadFromPhotograph();            dialog.dismiss();        }    });    AutoRelativeLayout rl_album = (AutoRelativeLayout) view.findViewById(R.id.rl_album);    rl_album.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //选择从相机            presenter.modifyHeadFromAlbum();            dialog.dismiss();        }    });}

2、两种方式:

private static String path = "/sdcard/myHead/";//sd路径private Bitmap head;//头像Bitmap@Overridepublic void modifyheadFromPhotograph() {    Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    //头像文件名称 head.jpg    intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"head.jpg")));    startActivityForResult(intent2, 2);//采用ForResult打开}@Overridepublic void modifyheadFromAlbum() {    Intent intent1 = new Intent(Intent.ACTION_PICK, null);    intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");    startActivityForResult(intent1, 1);}

3、根据requestCode分别处理

    //处理返回的resquestCodeprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    switch (requestCode) {        case 1:            if (resultCode == RESULT_OK) {                cropPhoto(data.getData());//裁剪图片            }            break;        case 2:            if (resultCode == RESULT_OK) {                File temp = new File(Environment.getExternalStorageDirectory()                        + "/head.jpg");                cropPhoto(Uri.fromFile(temp));//裁剪图片            }            break;        case 3:            if (data != null) {                Bundle extras = data.getExtras();                head = extras.getParcelable("data");                if (head != null) {                    /**                     * 上传服务器代码                     */                    setPicToView(head);//保存在SD卡中                    cv_headportrait.setImageBitmap(head);//用ImageView显示出来                }            }            break;        default:            break;    }    super.onActivityResult(requestCode, resultCode, data);}   

4、其他对应方法

/** * 调用系统的裁剪 * * @param uri */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);}private void setPicToView(Bitmap mBitmap) {    String sdStatus = Environment.getExternalStorageState();    if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用        return;    }    FileOutputStream b = null;    File file = new File(path);    file.mkdirs();// 创建文件夹    String fileName = path + "head.jpg";//图片名字    try {        b = new FileOutputStream(fileName);        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件    } catch (FileNotFoundException e) {        e.printStackTrace();    } finally {        try {            //关闭流            b.flush();            b.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

完结。。

更多相关文章

  1. Android 获取摄像头像素,个数
  2. Android 继承DialogFragment弹出dialog对话框二
  3. Android之Builder对话框的一些常用方式
  4. Android 测试上传头像到服务器
  5. Android很好用的确认对话框(DialogFragment)

随机推荐

  1. Android Accessibility(辅助功能) 安全相
  2. 波音787 Dreamliner娱乐系统将选择Androi
  3. Android中通过WebView控件实现与JavaScri
  4. Android Studio 单刷《第一行代码》系列
  5. Android生成签名文件并用其对apk文件进行
  6. Android模拟神器――Genymotion
  7. Android辅助功能AccessibilityService与
  8. 如何在MainActivity中使用ReactApplicati
  9. android开发笔记之2012版辅助开发工具包(A
  10. Android数据加密之SHA安全散列算法