以往的图片/视频选择,在onActivityResult中可以直接得到路径,但是在Android Q版本的手机上出现了问题,返回了类似于“id”的一个值,所以思路就是用这个id来得到需要的路径。具体的方法如下:
1.判断android版本
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
//适配androidQ版本
choiceVideoResult(File(MiPictureHelper.getAbPath(context,it[0].path)))
}else{
choiceVideoResult(File(it[0].path))
}
2.工具类MiPictureHelper
package com.netmi.romanticrecord.support;
import android.annotation.SuppressLint;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.text.TextUtils;
import java.io.File;
/**
* 类描述:
* 创建人:oahzgnohz
* 创建时间:2019/11/18
* 修改备注:
*/
public class MiPictureHelper {
public static String getAbPath(final Context context, final String myImageUrl){
Uri uri = Uri.parse(myImageUrl);
String[] proj = { MediaStore.Images.Media.DATA };
Cursor actualimagecursor = context.getContentResolver().query(uri,proj,null,null,null);
assert actualimagecursor != 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);
Uri fileUri = Uri.fromFile(file);
actualimagecursor.close();
return fileUri.getPath();
}
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = { column };
try {
cursor = context.getContentResolver().query(uri, projection,
selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
}
3.解决