1010import android .provider .MediaStore ;
1111import android .support .annotation .NonNull ;
1212import android .support .v4 .content .FileProvider ;
13+ import android .text .TextUtils ;
1314import android .util .Log ;
1415
1516import java .io .File ;
@@ -70,12 +71,16 @@ public static File uri2File(@NonNull final Uri uri) {
7071 Log .d ("UriUtils" , uri .toString () + " parse failed. -> 1" );
7172 return null ;
7273 } else if ("com.android.providers.downloads.documents" .equals (authority )) {
73- final String id = DocumentsContract .getDocumentId (uri );
74- final Uri contentUri = ContentUris .withAppendedId (
75- Uri .parse ("content://downloads/public_downloads" ),
76- Long .valueOf (id )
77- );
78- return getFileFromUri (contentUri , 2 );
74+ String id = DocumentsContract .getDocumentId (uri );
75+ if (!TextUtils .isEmpty (id )) {
76+ final Uri contentUri = ContentUris .withAppendedId (
77+ Uri .parse (Environment .DIRECTORY_DOWNLOADS ),
78+ Long .valueOf (id )
79+ );
80+ return getFileFromUri (contentUri , 2 );
81+ }
82+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 3" );
83+ return null ;
7984 } else if ("com.android.providers.media.documents" .equals (authority )) {
8085 final String docId = DocumentsContract .getDocumentId (uri );
8186 final String [] split = docId .split (":" );
@@ -88,22 +93,22 @@ public static File uri2File(@NonNull final Uri uri) {
8893 } else if ("audio" .equals (type )) {
8994 contentUri = MediaStore .Audio .Media .EXTERNAL_CONTENT_URI ;
9095 } else {
91- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 3 " );
96+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 4 " );
9297 return null ;
9398 }
9499 final String selection = "_id=?" ;
95100 final String [] selectionArgs = new String []{split [1 ]};
96- return getFileFromUri (contentUri , selection , selectionArgs , 4 );
101+ return getFileFromUri (contentUri , selection , selectionArgs , 5 );
97102 } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
98- return getFileFromUri (uri , 5 );
103+ return getFileFromUri (uri , 6 );
99104 } else {
100- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 6 " );
105+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 7 " );
101106 return null ;
102107 }
103108 } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
104- return getFileFromUri (uri , 7 );
109+ return getFileFromUri (uri , 8 );
105110 } else {
106- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 8 " );
111+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 9 " );
107112 return null ;
108113 }
109114 }
@@ -116,13 +121,14 @@ private static File getFileFromUri(final Uri uri,
116121 final String selection ,
117122 final String [] selectionArgs ,
118123 final int code ) {
119- final Cursor cursor = Utils .getApp ().getContentResolver ().query (
120- uri , new String []{"_data" }, selection , selectionArgs , null );
121- if (cursor == null ) {
122- Log .d ("UriUtils" , uri .toString () + " parse failed(cursor is null). -> " + code );
123- return null ;
124- }
124+ Cursor cursor = null ;
125125 try {
126+ cursor = Utils .getApp ().getContentResolver ().query (
127+ uri , new String []{"_data" }, selection , selectionArgs , null );
128+ if (cursor == null ) {
129+ Log .d ("UriUtils" , uri .toString () + " parse failed(cursor is null). -> " + code );
130+ return null ;
131+ }
126132 if (cursor .moveToFirst ()) {
127133 final int columnIndex = cursor .getColumnIndex ("_data" );
128134 if (columnIndex > -1 ) {
@@ -139,7 +145,9 @@ private static File getFileFromUri(final Uri uri,
139145 Log .d ("UriUtils" , uri .toString () + " parse failed. -> " + code );
140146 return null ;
141147 } finally {
142- cursor .close ();
148+ if (cursor != null ) {
149+ cursor .close ();
150+ }
143151 }
144152 }
145153}
0 commit comments