动态获取权限
private void checkPermiss() {
int i = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (i != PackageManager.PERMISSION_GRANTED) {//没有授权,申请权限
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
}, 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) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {//拍照成功,返回成功
//直接上传
// ok上传
long time = System.currentTimeMillis();
File mFile = new File(getExternalCacheDir(), time + ".jpg");
uploadOk(mFile);
}
if (requestCode == 200 && resultCode == RESULT_OK) {//相册选择照片后的回传
Uri uri = data.getData();//得到所选照片的路径的uri
String scheme = uri.getScheme();//得到当前手机对应相册的scheme
String imgPath = "";
if (scheme.equals("file")) {//低版本手机,直接获取图片的路径
imgPath = uri.getPath();//得到照片的路径
} else {//高版本需要到内容提供者读取
imgPath = getPathFromContent(uri);
}
if (!"".equals(imgPath)) {//imgPath不为空,则上传
File _file = new File(imgPath);//实例化图片对象
// ok上传
uploadOk(_file);
}
}
}
** //到内容提供者读取照片的路径**
private String getPathFromContent(Uri uri) {
if (uri == null)
return "";
ContentResolver resolver = getContentResolver();//内容解析者
//查询 通过照片的uri路径
Cursor cursor = resolver.query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();//因为只有一张,所以读取第一张即可
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));//得到图片的路径
return path;
}
return "";
}
OK上传
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(okhttp3.Call call, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(okhttp3.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);
}
});
}
});
}
**版本9.0以及9.0以上需要加以下方案,否则会报
错误:CLEARTEXT communication to www.baidu.com not permitted by network security policy
解决方案:
在application节点添加:android:usesCleartextTraffic="true"
<application
……………………
android:usesCleartextTraffic="true">
………………………………
</application>