private String path;
path = Environment.getExternalStorageDirectory() + "/head.jpg";
调用相机
// 这个出捕获图片的常量值
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 设置图片输出位置; 输出到制定的uri路径上;
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
// 设置请求码
startActivityForResult(intent, 100);
调用相册
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 101);
代码
/**
* 接收回传值
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {
//不调用裁剪功能
// File file = new File(path);
// presenter.getFile(file);
//调用裁剪功能
crop(Uri.fromFile(new File(path)));
} else if (requestCode == 101 && resultCode == RESULT_OK) {
// 获取data中的数据
Uri uri = data.getData();
crop(uri);
/*String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = managedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
File file = new File(img_path);*/
// presenter.getFile(file);
} else if (requestCode == 102 && resultCode == RESULT_OK) {
//这个参数data,是固定写法
File file = new File(path);
Bitmap bitmap = data.getParcelableExtra("data");
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
//上传
presenter.getFile(file);
}
}
裁剪功能
/**
* 剪切
*/
public void crop(Uri uri) {
// 隐式启动, 里面传的是action
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");// 图片格式
intent.putExtra("noFaceDetection", false);// 取消人脸识别
// 设置剪裁后是否返回数据
intent.putExtra("return-data", true);
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
startActivityForResult(intent, 102);
}
上传文件的vpi
//上传文件
@Multipart
@POST("file/upload")
Observable<FileBean> uploadFile(@Query("uid") String uid,
@Part("file\"; filename=\"avatar.jpg") RequestBody file);
上传文件的数据请求
public void getFile(File file, final IPer iPer) {
RetiofitVip retiofitVip = RetrofitHelper.getRetrofit("http://120.27.23.105/").create(RetiofitVip.class);
//创建RequwstBody对象
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
retiofitVip.uploadFile("4115", requestBody)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<FileBean>() {
@Override
public void accept(FileBean nicknameBean) throws Exception {
if (nicknameBean != null) {
iPer.onSuccess(nicknameBean);
} else {
iPer.onFailed("数据错误");
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}