22
33import android .content .ContentResolver ;
44import android .content .ContentUris ;
5- import android .content .CursorLoader ;
65import android .database .Cursor ;
76import android .net .Uri ;
87import android .os .Build ;
@@ -59,8 +58,6 @@ public static File uri2File(@NonNull final Uri uri) {
5958 if (path != null ) return new File (path );
6059 Log .d ("UriUtils" , uri .toString () + " parse failed. -> 0" );
6160 return null ;
62- } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
63- return getFileFromUri (uri , 1 );
6461 } else if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT
6562 && DocumentsContract .isDocumentUri (Utils .getApp (), uri )) {
6663 if ("com.android.externalstorage.documents" .equals (authority )) {
@@ -70,15 +67,15 @@ public static File uri2File(@NonNull final Uri uri) {
7067 if ("primary" .equalsIgnoreCase (type )) {
7168 return new File (Environment .getExternalStorageDirectory () + "/" + split [1 ]);
7269 }
73- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 2 " );
70+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 1 " );
7471 return null ;
7572 } else if ("com.android.providers.downloads.documents" .equals (authority )) {
7673 final String id = DocumentsContract .getDocumentId (uri );
7774 final Uri contentUri = ContentUris .withAppendedId (
7875 Uri .parse ("content://downloads/public_downloads" ),
7976 Long .valueOf (id )
8077 );
81- return getFileFromUri (contentUri , 3 );
78+ return getFileFromUri (contentUri , 2 );
8279 } else if ("com.android.providers.media.documents" .equals (authority )) {
8380 final String docId = DocumentsContract .getDocumentId (uri );
8481 final String [] split = docId .split (":" );
@@ -91,18 +88,22 @@ public static File uri2File(@NonNull final Uri uri) {
9188 } else if ("audio" .equals (type )) {
9289 contentUri = MediaStore .Audio .Media .EXTERNAL_CONTENT_URI ;
9390 } else {
94- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 4 " );
91+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 3 " );
9592 return null ;
9693 }
9794 final String selection = "_id=?" ;
9895 final String [] selectionArgs = new String []{split [1 ]};
99- return getFileFromUri (contentUri , selection , selectionArgs , 5 );
96+ return getFileFromUri (contentUri , selection , selectionArgs , 4 );
97+ } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
98+ return getFileFromUri (uri , 5 );
10099 } else {
101100 Log .d ("UriUtils" , uri .toString () + " parse failed. -> 6" );
102101 return null ;
103102 }
103+ } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
104+ return getFileFromUri (uri , 7 );
104105 } else {
105- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 7 " );
106+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 8 " );
106107 return null ;
107108 }
108109 }
@@ -115,22 +116,30 @@ private static File getFileFromUri(final Uri uri,
115116 final String selection ,
116117 final String [] selectionArgs ,
117118 final int code ) {
118- CursorLoader cl = new CursorLoader (Utils .getApp ());
119- cl .setUri (uri );
120- cl .setProjection (new String []{"_data" });
121- Cursor cursor = null ;
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+ }
122125 try {
123- cursor = cl .loadInBackground ();
124- int columnIndex = cursor .getColumnIndexOrThrow ("_data" );
125- cursor .moveToFirst ();
126- return new File (cursor .getString (columnIndex ));
126+ if (cursor .moveToFirst ()) {
127+ final int columnIndex = cursor .getColumnIndex ("_data" );
128+ if (columnIndex > -1 ) {
129+ return new File (cursor .getString (columnIndex ));
130+ } else {
131+ Log .d ("UriUtils" , uri .toString () + " parse failed(columnIndex: " + columnIndex + " is wrong). -> " + code );
132+ return null ;
133+ }
134+ } else {
135+ Log .d ("UriUtils" , uri .toString () + " parse failed(moveToFirst return false). -> " + code );
136+ return null ;
137+ }
127138 } catch (Exception e ) {
128139 Log .d ("UriUtils" , uri .toString () + " parse failed. -> " + code );
129140 return null ;
130141 } finally {
131- if (cursor != null ) {
132- cursor .close ();
133- }
142+ cursor .close ();
134143 }
135144 }
136145}
0 commit comments