相机相册+上传头像

相机相册调用

package com.example.cameraphoto5k;

import java.io.File;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {
	private static final String TAG = "MainActivity";
	private static final int FLAG_CAMERA_REQUEST = 100;
	private static final int FLAG_ALUMB_REQUEST = 101;
	private static final int FLAG_CROP_REQUEST = 102;

	private Button btnTake;
	private Button btnChoose;
	private ImageView imgLogo;
	private Intent intent;
	private File imgRoot;
	private Uri uri;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 说明外置存储可用,已经被挂载
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
			// SD卡根目录
			File rootSD = Environment.getExternalStorageDirectory();
			imgRoot = new File(rootSD.getAbsolutePath() + File.separator + "imgs");

			if (!imgRoot.exists()) {
				imgRoot.mkdirs();
			}
		}

		btnTake = (Button) findViewById(R.id.btn_take_photo);
		btnChoose = (Button) findViewById(R.id.btn_choose_alumb);
		imgLogo = (ImageView) findViewById(R.id.img_logo);

		btnTake.setOnClickListener(this);
		btnChoose.setOnClickListener(this);

		//
		// 隐式Intent,我们不用去指定要跳转到的Activity,只需要指定一个Action,就可以跳转到相应的页面
		// 这个页面一般是系统给我们指定好的页面
		// Intent intent = new Intent(Intent.ACTION_PICK);
		// // 设置类型 image/jpeg image/png image/gif,*是通配符
		// intent.setType("image/*");
		// startActivity(intent);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_take_photo:
			// /storage/0/emulate/imgs/3243242323.jpg
			File f = new File(imgRoot, new Date().getTime() + ".jpg");
			uri = Uri.fromFile(f);

			// 系统相机的隐式Intent是MediaStore.ACTION_IMAGE_CAPTURE)
			intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			// Uri
			// 拍照输出的路径
			intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
			startActivityForResult(intent, FLAG_CAMERA_REQUEST);

			break;
		case R.id.btn_choose_alumb:
			intent = new Intent(Intent.ACTION_PICK);
			// 设置类型 image/jpeg image/png image/gif,*是通配符
			intent.setType("image/*");
			startActivityForResult(intent, FLAG_ALUMB_REQUEST);
			break;

		default:
			break;
		}
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		// 从系统相机返回的值
		if (requestCode == FLAG_CAMERA_REQUEST) {
//			imgLogo.setImageURI(uri);
			
			intent = crop(uri);
			startActivityForResult(intent, FLAG_CROP_REQUEST);
		} else if (requestCode == FLAG_ALUMB_REQUEST) {
			// 从相册中返回的值
			uri = data.getData();
//			imgLogo.setImageURI(uri);

			intent = crop(uri);
			startActivityForResult(intent, FLAG_CROP_REQUEST);
		} else if (requestCode == FLAG_CROP_REQUEST) {
			// 从返回值中直接获取bitmap
			Bitmap bmp = (Bitmap) data.getExtras().get("data");
			imgLogo.setImageBitmap(bmp);
		}
	}

	/**
	 * 裁剪
	 * @param uri
	 * @return
	 */
	private Intent crop(Uri uri) {
		// 隐式Intent,调用系统的裁剪
		Intent intent = new Intent("com.android.camera.action.CROP");
		// 设置裁剪的数据源和数据类型
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");// 可裁剪
		// 裁剪的宽高比例
		intent.putExtra("aspectX", 1); // 裁剪的宽比例
		intent.putExtra("aspectY", 1); // 裁剪的高比例

		// 裁剪的宽度和高度
		intent.putExtra("outputX", 300); // 裁剪的宽度
		intent.putExtra("outputY", 300); // 裁剪的高度
		// 可省略
		intent.putExtra("scale", true); // 支持缩放
		// 裁剪之后保存的路径
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(uri.getPath() + ".bak")); // 将裁剪的结果输出到指定的Uri
		// 必须加,否则返回值中找不到返回的值
		intent.putExtra("return-data", true); // 若为true则表示返回数据
		// 可以省略
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 裁剪成的图片的格式
		// intent.putExtra("noFaceDetection", true); //启用人脸识别
		return intent;
	}
}
1.apI接口声明
@Multipart
@POST("file/upload")
Call<Bean> upLoad(@Query("uid") String uid, @Part MultipartBody.Part part);
File:/data/data/com.umeng.soexample.JingDong20181106/files/defaultGoodInfo/messageImg.jpg
2.代码构造 MultipartBody.Part
LoginApi loignApi = RetrofitManager.getDefault().create(LoginApi.class);
File file = getFile();
//RequestBody封装了文件和文件的类型
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
// MultipartBody.Part封装了接受的key和文件名字和RequestBody
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
Call<Bean> login = loignApi.upLoad("71", part);

PopupWindow的使用

package com.umeng.soexample;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.abner.ming.MingUtils;
import com.abner.ming.ResultListener;
import com.abner.ming.UmengBean;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;
import com.umeng.socialize.UMShareAPI;

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Date;

import butterknife.BindView;
import butterknife.ButterKnife;

import static com.umeng.socialize.utils.ContextUtil.getContext;

public class MainActivity extends AppCompatActivity implements IView {

    @BindView(R.id.tou)
    SimpleDraweeView tou;
    @BindView(R.id.name)
    TextView name;
    @BindView(R.id.btn_qq_login)
    Button btnQqLogin;
    private UploadPresenter presenter;
    private File imgRoot;
    private Uri uri;
    private Intent intent1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Fresco.initialize(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        presenter = new UploadPresenter();
        presenter.attach(this);
        // 说明外置存储可用,已经被挂载
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            File rootSD = Environment.getExternalStorageDirectory();
            imgRoot = new File(rootSD.getAbsolutePath() + File.separator + "imgs");
            if(!imgRoot.exists()){
                imgRoot.mkdirs();
            }
        }


//        initData();
        setListener();
    }

    private void initData() {

    }

    private void setListener() {
        tou.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent1 = new Intent(Intent.ACTION_PICK);
                // 设置类型 image/jpeg image/png image/gif,*是通配符
                intent1.setType("image/*");
                startActivityForResult(intent1, 1);
//                File f = new File(imgRoot, new Date(1).getTime() + ".jpg");
//                uri = Uri.fromFile(f);
//
//                // 系统相机的隐式Intent是MediaStore.ACTION_IMAGE_CAPTURE)
//                intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//                // Uri
//                // 拍照输出的路径
//                intent1.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//                startActivityForResult(intent1, 1);

            }
        });
//        presenter.get("",file);
        btnQqLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                qqLoginJump();
            }
        });
    }

    public File getFile(Bitmap bmp) {
//        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        //getApplicationContext 更改为 getContext
        String defaultPath = getContext().getFilesDir()
                .getAbsolutePath() + "/defaultGoodInfo";
        File file = new File(defaultPath);
        if (!file.exists()) {
            file.mkdirs();
        }
        String defaultImgPath = defaultPath + "/messageImg.jpg";
        file = new File(defaultImgPath);
        try {
            file.createNewFile();
            FileOutputStream fOut = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.PNG, 20, fOut);
            fOut.flush();
            fOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file;
    }
    private void qqLoginJump() {
        MingUtils.login(this, 0, new ResultListener() {
            @Override
            public void success(UmengBean umengBean) {
                Toast.makeText(MainActivity.this,umengBean.getName()+"登录成功",Toast.LENGTH_SHORT).show();
                name.setText(umengBean.getName() + umengBean.getGender());
                tou.setImageURI(Uri.parse(umengBean.getIconurl()));
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
//        if (requestCode == FLAG_CAMERA_REQUEST) {
			imgLogo.setImageURI(uri);
//
//            intent = crop(uri);
//            startActivityForResult(intent, FLAG_CROP_REQUEST);
//        } else
            if (requestCode == 1) {
            // 从相册中返回的值
//            uri = data.getData();
//			imgLogo.setImageURI(uri);
                uri = data.getData();
//			imgLogo.setImageURI(uri);

                intent1 = crop(uri);
                startActivityForResult(intent1, 2);

        } else if (requestCode == 2) {
            // 从返回值中直接获取bitmap
            Bitmap bmp = (Bitmap) data.getExtras().get("data");
            File filea = getFile(bmp);
            presenter.get("21206",filea);
        }
    }

    @Override
    public void success(RegBean regBean) {
        Toast.makeText(this, ""+regBean.getMsg(), Toast.LENGTH_SHORT).show();

    }

    @Override
    public void failed(Throwable throwable) {
        Toast.makeText(this, ""+throwable.getMessage(), Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(presenter != null){
            presenter.detach();
        }
    }
    /**
     * 裁剪
     * @param uri
     * @return
     */
    private Intent crop(Uri uri) {
        // 隐式Intent,调用系统的裁剪
        Intent intent = new Intent("com.android.camera.action.CROP");
        // 设置裁剪的数据源和数据类型
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");// 可裁剪
        // 裁剪的宽高比例
        intent.putExtra("aspectX", 1); // 裁剪的宽比例
        intent.putExtra("aspectY", 1); // 裁剪的高比例

        // 裁剪的宽度和高度
        intent.putExtra("outputX", 300); // 裁剪的宽度
        intent.putExtra("outputY", 300); // 裁剪的高度
        // 可省略
        intent.putExtra("scale", true); // 支持缩放
        // 裁剪之后保存的路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(uri.getPath() + ".bak")); // 将裁剪的结果输出到指定的Uri
        // 必须加,否则返回值中找不到返回的值
        intent.putExtra("return-data", true); // 若为true则表示返回数据
        // 可以省略
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 裁剪成的图片的格式
        // intent.putExtra("noFaceDetection", true); //启用人脸识别
        return intent;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值