如何从Android奥利奥及以上版本的下载文件夹上传文件



我正在尝试编写从Android Oreo及以上版本上传文件的代码。首先,我正在运行一个获取文件uri的意图。

intent_upload.action = Intent.ACTION_GET_CONTENT
return Intent.createChooser(intent_upload, pickerTitle)

但当我从下载文件夹中选择文件时,它会从下面的代码中返回一个空的filepath。它非常适用于Android奥利奥以下的设备,但我找不到任何适用于Android及以上版本的解决方案。

请帮助

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及更高版本正在发生这种情况。

我的动机是从安卓的下载文件夹上传一个pdf文件。

我知道这已经过期了。我也面临这个问题,我能够从这个要点中找到解决方案。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));
}

最新更新