2
2
3
3
import android .content .ContentResolver ;
4
4
import android .content .ContentUris ;
5
- import android .content .CursorLoader ;
6
5
import android .database .Cursor ;
7
6
import android .net .Uri ;
8
7
import android .os .Build ;
@@ -59,8 +58,6 @@ public static File uri2File(@NonNull final Uri uri) {
59
58
if (path != null ) return new File (path );
60
59
Log .d ("UriUtils" , uri .toString () + " parse failed. -> 0" );
61
60
return null ;
62
- } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
63
- return getFileFromUri (uri , 1 );
64
61
} else if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT
65
62
&& DocumentsContract .isDocumentUri (Utils .getApp (), uri )) {
66
63
if ("com.android.externalstorage.documents" .equals (authority )) {
@@ -70,15 +67,15 @@ public static File uri2File(@NonNull final Uri uri) {
70
67
if ("primary" .equalsIgnoreCase (type )) {
71
68
return new File (Environment .getExternalStorageDirectory () + "/" + split [1 ]);
72
69
}
73
- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 2 " );
70
+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 1 " );
74
71
return null ;
75
72
} else if ("com.android.providers.downloads.documents" .equals (authority )) {
76
73
final String id = DocumentsContract .getDocumentId (uri );
77
74
final Uri contentUri = ContentUris .withAppendedId (
78
75
Uri .parse ("content://downloads/public_downloads" ),
79
76
Long .valueOf (id )
80
77
);
81
- return getFileFromUri (contentUri , 3 );
78
+ return getFileFromUri (contentUri , 2 );
82
79
} else if ("com.android.providers.media.documents" .equals (authority )) {
83
80
final String docId = DocumentsContract .getDocumentId (uri );
84
81
final String [] split = docId .split (":" );
@@ -91,18 +88,22 @@ public static File uri2File(@NonNull final Uri uri) {
91
88
} else if ("audio" .equals (type )) {
92
89
contentUri = MediaStore .Audio .Media .EXTERNAL_CONTENT_URI ;
93
90
} else {
94
- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 4 " );
91
+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 3 " );
95
92
return null ;
96
93
}
97
94
final String selection = "_id=?" ;
98
95
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 );
100
99
} else {
101
100
Log .d ("UriUtils" , uri .toString () + " parse failed. -> 6" );
102
101
return null ;
103
102
}
103
+ } else if (ContentResolver .SCHEME_CONTENT .equals (scheme )) {
104
+ return getFileFromUri (uri , 7 );
104
105
} else {
105
- Log .d ("UriUtils" , uri .toString () + " parse failed. -> 7 " );
106
+ Log .d ("UriUtils" , uri .toString () + " parse failed. -> 8 " );
106
107
return null ;
107
108
}
108
109
}
@@ -115,22 +116,30 @@ private static File getFileFromUri(final Uri uri,
115
116
final String selection ,
116
117
final String [] selectionArgs ,
117
118
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
+ }
122
125
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
+ }
127
138
} catch (Exception e ) {
128
139
Log .d ("UriUtils" , uri .toString () + " parse failed. -> " + code );
129
140
return null ;
130
141
} finally {
131
- if (cursor != null ) {
132
- cursor .close ();
133
- }
142
+ cursor .close ();
134
143
}
135
144
}
136
145
}
0 commit comments