我正在尝试编写代码以从Android Oreo及更高版本上传文件。首先,我打算获取文件的uri。
intent_upload.action = Intent.ACTION_GET_CONTENT
return Intent.createChooser(intent_upload, pickerTitle)
但是,当我从下载文件夹中选择文件时,它从以下代码中返回空filepath
。它完美适用于Android Oreo以下的设备,但是我找不到适用于android o及更高版本的任何解决方案。
请帮助
val id = DocumentsContract.getDocumentId(uri)
val contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), java.lang.Long.valueOf(id));
return getDataColumn(context, contentUri, null, null)
getDataColumn
的代码如下
fun getDataColumn(context: Context, uri: Uri?, selection: String?,
selectionArgs: Array<String>?): String? {
var cursor: Cursor? = null
val column = "_data"
val projection = arrayOf(column)
try {
cursor = context.contentResolver.query(uri!!, projection, selection, selectionArgs, null)
val temp = context
if (cursor != null && cursor.moveToFirst()) {
val index = cursor.getColumnIndexOrThrow(column)
return cursor.getString(index)
}
}catch (e:Exception){
} finally {
cursor?.close()
}
return null
}
API 26及更高版本正在发生这种情况。
我的动机是从Android的downloads文件夹中上传pdf文件。
答案 0 :(得分:0)
我知道这已经过期了。我也遇到了这个问题,并且能够从这个要点中找到解决方案。 FileUtils.java。只需在您的项目中使用该util类
只需将此处留给将来会遇到此问题的人们即可。浪费了几个小时的时间。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri uri = data.getData();
File originalFile = new File(FileUtils.getRealPath(this,uri));
}