Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从OneDrive内容Uri检索文件名和大小_Android_Uri_Onedrive - Fatal编程技术网

Android 从OneDrive内容Uri检索文件名和大小

Android 从OneDrive内容Uri检索文件名和大小,android,uri,onedrive,Android,Uri,Onedrive,我正在使用这段代码来检索内容Uri的名称和大小,到目前为止,它对于提供内容Uri的OneDrive、Dropbox、Google Drive和Box的所有云存储应用程序都非常有效 OneDrive最新更新版本2.7.0添加了使用storage access framework打开文件的选项后,问题开始出现。当您通过“打开的意图选择器”在Nexus设备上选择文件时,OneDrive应用程序会出现两次请参见附加屏幕截图: 从上层OneDrive中选择任何文件都将返回一个内容Uri,其中 文件大小始

我正在使用这段代码来检索内容Uri的名称和大小,到目前为止,它对于提供内容Uri的OneDrive、Dropbox、Google Drive和Box的所有云存储应用程序都非常有效

OneDrive最新更新版本2.7.0添加了使用storage access framework打开文件的选项后,问题开始出现。当您通过“打开的意图选择器”在Nexus设备上选择文件时,OneDrive应用程序会出现两次请参见附加屏幕截图:

从上层OneDrive中选择任何文件都将返回一个内容Uri,其中 文件大小始终为0,文件名始终为URI本身。 但是,从较低的OneDrive中选择任何文件都将返回一个为其缓存的文件Uri 文件大小和名称是正确的


任何帮助都将不胜感激。

对于SAF提供商,您应该阅读文档contract.Document.COLUMN\u DISPLAY\u name android.provider.MediaStore.Images.ImageColumns.DISPLAY中的项目名称,而不是SAF概念。您如何检查文件大小?你在用什么API?谢谢,但没用。DocumentsContract.Document.COLUMN\u DISPLAY\u NAME和android.provider.MediaStore.Images.ImageColumns.DISPLAY实际上是相同的常量-\u DISPLAY\u NAME。此外,它已经对Box和Google Drive起到了作用。我正在使用相同的API检查文件大小,但是对于传递给查询方法OpenableColumns.size的第二个参数使用了不同的常量。除了OneDrive总是返回0外,它对其他云运行良好。您是否检查了游标中返回的内容?是否可能忽略了投影,所以列索引不是0?我刚刚检查了它,您是对的!忽略投影,返回所有列,而不仅仅是请求的列,因此列索引不是正确的。知道如何只获取请求的列吗?或者我别无选择,只能遍历所有列并搜索相关列?
if (fileUri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) 
{
            Cursor cursor = getApplicationContext().getContentResolver().query(
                    fileUri, 
                    new String[] { android.provider.MediaStore.Images.ImageColumns.DISPLAY_NAME }, 
                    null, 
                    null, 
                    null);         
            cursor.moveToFirst();   
            fileName = cursor.getString(0);
            cursor.close();
}