private static final int ALBUM_CODE = 200;
private static final int CAMERA_CODE = 100;
开启相册并选择图片上传(注意权限处理):
private void openAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent,ALBUM_CODE);
}
意图回调获取图片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CODE) {
//相机
if (resultCode == RESULT_OK){
try {
//Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(mImageUri));
uploadOk(mFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}else if (requestCode == ALBUM_CODE){
//相册
if (resultCode == RESULT_OK){
Uri imageUri = data.getData();
//处理uri,7.0以后的fileProvider 把URI 以content provider 方式 对外提供的解析方法
File file = getFileFromUri(imageUri, this);
if (file.exists()){
uploadOk(file);
}
}
}
}
7.0以后的fileProvider 把URI 以content provider 方式 对外提供的解析方法
public File getFileFromUri(Uri uri, Context context) {
if (uri == null) {
return null;
}
switch (uri.getScheme()) {
case "content":
return getFileFromContentUri(uri, context);
case "file":
return new File(uri.getPath());
default:
return null;
}
}
/**
通过内容解析中查询uri中的文件路径
*/
private File getFileFromContentUri(Uri contentUri, Context context) {
if (contentUri == null) {
return null;
}
File file = null;
String filePath;
String[] filePathColumn = {MediaStore.MediaColumns.DATA};
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(contentUri, filePathColumn, null,
null, null);
if (cursor != null) {
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
cursor.close();
if (!TextUtils.isEmpty(filePath)) {
file = new File(filePath);
}
}
return file;
}
private void uploadOk(File file) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
MultipartBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("key", "1908A")
.addFormDataPart("file", file.getName(), requestBody)
.build();
Request request = new Request.Builder()
.url("http://yun918.cn/study/public/file_upload.php")
.post(body)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final UpLoadBean upLoadBean = new Gson().fromJson(string, UpLoadBean.class);
final UpLoadBean.DataBean data = upLoadBean.getData();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, upLoadBean.getRes(), Toast.LENGTH_SHORT).show();
Log.d(TAG, "run: " + upLoadBean.getRes());
Glide.with(MainActivity.this).load(data.getUrl()).into(mImage);
}
});
}
});
}