相机相册调用
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;
}
}