Android Uri和文件路径互相转换的实例代码
在项目中需要用到将Uri转换为绝对路径,在网上找到一个方法,做个笔记
网上有不少方法,但是有的对4.4后的版本无效,这里的方法可以在4.4之后的版本将Uri转换为绝对路径
publicclassGetPathFromUri{ /** *专为Android4.4设计的从Uri获取文件绝对路径 */ publicstaticStringgetPath(finalContextcontext,finalUriuri){ finalbooleanisKitKat=Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT; //DocumentProvider if(isKitKat&&DocumentsContract.isDocumentUri(context,uri)){ //ExternalStorageProvider if(isExternalStorageDocument(uri)){ finalStringdocId=DocumentsContract.getDocumentId(uri); finalString[]split=docId.split(":"); finalStringtype=split[0]; if("primary".equalsIgnoreCase(type)){ returnEnvironment.getExternalStorageDirectory()+"/"+split[1]; } } //DownloadsProvider elseif(isDownloadsDocument(uri)){ finalStringid=DocumentsContract.getDocumentId(uri); finalUricontentUri=ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"),Long.valueOf(id)); returngetDataColumn(context,contentUri,null,null); } //MediaProvider elseif(isMediaDocument(uri)){ finalStringdocId=DocumentsContract.getDocumentId(uri); finalString[]split=docId.split(":"); finalStringtype=split[0]; UricontentUri=null; if("image".equals(type)){ contentUri=MediaStore.Images.Media.EXTERNAL_CONTENT_URI; }elseif("video".equals(type)){ contentUri=MediaStore.Video.Media.EXTERNAL_CONTENT_URI; }elseif("audio".equals(type)){ contentUri=MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } finalStringselection="_id=?"; finalString[]selectionArgs=newString[]{split[1]}; returngetDataColumn(context,contentUri,selection,selectionArgs); } } //MediaStore(andgeneral) elseif("content".equalsIgnoreCase(uri.getScheme())){ returngetDataColumn(context,uri,null,null); } //File elseif("file".equalsIgnoreCase(uri.getScheme())){ returnuri.getPath(); } returnnull; } /** *GetthevalueofthedatacolumnforthisUri.Thisisusefulfor *MediaStoreUris,andotherfile-basedContentProviders. * *@paramcontextThecontext. *@paramuriTheUritoquery. *@paramselection(Optional)Filterusedinthequery. *@paramselectionArgs(Optional)Selectionargumentsusedinthequery. *@returnThevalueofthe_datacolumn,whichistypicallyafilepath. */ publicstaticStringgetDataColumn(Contextcontext,Uriuri,Stringselection, String[]selectionArgs){ Cursorcursor=null; finalStringcolumn="_data"; finalString[]projection={column}; try{ cursor=context.getContentResolver().query(uri,projection,selection,selectionArgs, null); if(cursor!=null&&cursor.moveToFirst()){ finalintcolumn_index=cursor.getColumnIndexOrThrow(column); returncursor.getString(column_index); } }finally{ if(cursor!=null) cursor.close(); } returnnull; } /** *@paramuriTheUritocheck. *@returnWhethertheUriauthorityisExternalStorageProvider. */ publicstaticbooleanisExternalStorageDocument(Uriuri){ return"com.android.externalstorage.documents".equals(uri.getAuthority()); } /** *@paramuriTheUritocheck. *@returnWhethertheUriauthorityisDownloadsProvider. */ publicstaticbooleanisDownloadsDocument(Uriuri){ return"com.android.providers.downloads.documents".equals(uri.getAuthority()); } /** *@paramuriTheUritocheck. *@returnWhethertheUriauthorityisMediaProvider. */ publicstaticbooleanisMediaDocument(Uriuri){ return"com.android.providers.media.documents".equals(uri.getAuthority()); } }
绝对路径转Uri比较简单
以绝对路径创建一个File对象,然后调用
Uri.fromFile(file)
以上所述是小编给大家介绍的AndroidUri和文件路径互相转换的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!