android头像上传(图库和相机)

首先是xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin">

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@android:color/holo_red_light" />

    <Button
        android:id="@+id/camera_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="照相机" />

    <Button
        android:id="@+id/gallery_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="图库" />

    <Button
        android:id="@+id/dialog_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="对话框" />
</LinearLayout>
然后是java代码:

<pre name="code" class="java">package com.ymhd.mifen.setting;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.example.mifen.R;
import com.ymhd.mifei.tool.CircleImageView;
import com.ymhd.mifen.http.APP_url;

import net.sf.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class editmyself extends Activity {

    private ImageView settingedit_back;
    private LinearLayout settingaddress;
    private CircleImageView mHeaderImage;//头像
    //
    private static int CAMERA_REQUST_CODE = 1;
    private static int GALLERY_REQUST_CODE = 2;
    private static int CROP_REQUST_CODE = 3;
    private APP_url mApp = new APP_url();
    private SharedPreferences sp;
    private String mPictureFile, filePath;
    //
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting_edit_myself);
        init();
    }

    public void init() {
        sp = getSharedPreferences("token&refreshtoken", Context.MODE_PRIVATE);
        settingedit_back = (ImageView) findViewById(R.id.settingedit_back);
        settingaddress = (LinearLayout) findViewById(R.id.setting_address);
        //头像
        mHeaderImage = (CircleImageView) findViewById(R.id.myself_header);
        mHeaderImage.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showHeaderDialog();
            }
        });
        //
        settingedit_back.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
            }
        });
        settingaddress.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent in = new Intent(editmyself.this, address.class);
                startActivity(in);
            }
        });
    }

    /**
     * 弹出头像对话框
     */
    public void showHeaderDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(editmyself.this);  //先得到构造器
        builder.setTitle("更换头像"); //设置标题
        builder.setIcon(R.drawable.ic_launcher);//设置图标,图片id即可
        builder.setPositiveButton("拍照", new DialogInterface.OnClickListener() { //设置确定按钮
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss(); //关闭dialog
                //拍照的intent---action
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUST_CODE);
            }
        });
        builder.setNegativeButton("从相册选择", new DialogInterface.OnClickListener() { //设置取消按钮
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                galleryIntent.setType("image/*");
                startActivityForResult(galleryIntent, GALLERY_REQUST_CODE);
            }
        });
        //参数都设置完成了,创建并显示出来
        builder.create().show();
    }

    public String getPhotoPath() {
        return Environment.getExternalStorageDirectory() + "/DCIM/";
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("filePath", filePath);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (TextUtils.isEmpty(filePath)) {
            filePath = savedInstanceState.getString("filePath");
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //如果返回码是照相机返回码,就进行以下处理
        if (requestCode == CAMERA_REQUST_CODE) {
            if (data == null) {
                return;
            } else {
                Bundle extras = data.getExtras();
                if (extras != null) {
                    Bitmap bitmap = extras.getParcelable("data");
                    Uri uri = saveBitMap(bitmap);
                    startImageZoom(uri);
                }
            }
//如果返回码是相册,就进行处理
        } else if (requestCode == GALLERY_REQUST_CODE) {
            if (data == null) {
                return;
            } else {
                Uri contentUri = data.getData();
                Uri fileUri = convertUri(contentUri);
                startImageZoom(fileUri);
            }
//图片裁剪界面返回码
        } else if (requestCode == CROP_REQUST_CODE) {
            if (data == null) {
                return;
            }
            Bundle bundle = data.getExtras();
            Bitmap bitMap = bundle.getParcelable("data");
            mHeaderImage.setImageBitmap(bitMap);
            sendImageToServer(bitMap);
        }
    }

    /**
     * 发送图片到服务器
     *
     * @param bitmap
     */
    private void sendImageToServer(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 85, baos);
        byte[] bytes = baos.toByteArray();
        String imageStr = new String(bytes);
        //到此已经得到了头像的字节字符串
        asyncLoadPicture(imageStr.trim());
    }

    /**
     * 将修改头像数据(字符串)上传到服务器
     *
     * @param avater
     */
    public void asyncLoadPicture(final String avater) {
        new AsyncTask() {

            @Override
            protected Object doInBackground(Object[] params) {
                JSONObject data = null;
                try {
                    data = mApp.putMemberInfoByAvatar(sp.getString("logintoken", ""), avater);
                } catch (ParseException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return data;
            }

            @Override
            protected void onPostExecute(Object o) {
                super.onPostExecute(o);

            }
        }.execute();
    }

    /**
     * 启动图片裁剪界面
     *
     * @param uri
     */
    private void startImageZoom(Uri uri) {
        Intent imageZoomIntent = new Intent("com.android.camera.action.CROP");
        imageZoomIntent.setDataAndType(uri, "image/*");
        imageZoomIntent.putExtra("crop", "true");
        imageZoomIntent.putExtra("aspectX", 1);
        imageZoomIntent.putExtra("aspectY", 1);
        imageZoomIntent.putExtra("outputX", 150);
        imageZoomIntent.putExtra("outputY", 150);
        imageZoomIntent.putExtra("return-data", true);
        startActivityForResult(imageZoomIntent, CROP_REQUST_CODE);
    }

    /**
     * 将content的uri转成file的uri
     *
     * @param contentUri
     * @return
     */
    private Uri convertUri(Uri contentUri) {
        InputStream is = null;
        try {
            is = getContentResolver().openInputStream(contentUri);
            Bitmap bitMap = BitmapFactory.decodeStream(is);
            is.close();
            return saveBitMap(bitMap);
        } catch (FileNotFoundException e) {
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 保存bitmap图像到本地文件
     *
     * @param bitMap
     * @return返回一个file类型的uri
     */
    private Uri saveBitMap(Bitmap bitMap) {
        //获取保存到的文件夹路劲
        File rootFile = new File(Environment.getExternalStorageDirectory() + "/com.bruce");
        if (!rootFile.exists()) {
            rootFile.mkdirs();
        }

        SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");//格式大小写有区别
        String sysDatetime = fmt.format(Calendar.getInstance().getTime());//2016年02月25日  13:23:40
        mPictureFile = sysDatetime + ".jpg";
        filePath = getPhotoPath() + mPictureFile;//获取保存到的文件夹路劲
        //保存的文件file
//        File imageFile = new File(rootFile.getAbsolutePath() + "image.png");
        File imageFile = new File(filePath);
        try {
            FileOutputStream fos = new FileOutputStream(imageFile);
            /**
             * 将图像压缩--图像格式--图像压缩质量--输出流
             */
            bitMap.compress(Bitmap.CompressFormat.PNG, 85, fos);
            fos.flush();
            fos.close();
            return Uri.fromFile(imageFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

}

 不要忘了加权限: 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bruce.testpicture">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值