1
2
3
4
5
6
7
8
|
Intent intent= new
Intent(Intent.ACTION_GET_CONTENT); //ACTION_OPEN_DOCUMENT
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType( "image/jpeg" );
if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.KITKAT){
startActivityForResult(intent, SELECT_PIC_KITKAT);
} else {
startActivityForResult(intent, SELECT_PIC);
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
public static String getPath( final
Context context, final
Uri uri) {
final
boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if
(isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if
(isExternalStorageDocument(uri)) {
final
String docId = DocumentsContract.getDocumentId(uri);
final
String[] split = docId.split( ":" );
final
String type = split[ 0 ];
if
( "primary" .equalsIgnoreCase(type)) {
return
Environment.getExternalStorageDirectory() + "/"
+ split[ 1 ];
}
// TODO handle non-primary volumes
} else
if (isDownloadsDocument(uri)) { // DownloadsProvider
final
String id = DocumentsContract.getDocumentId(uri);
final
Uri contentUri = ContentUris.withAppendedId(
return
getDataColumn(context, contentUri, null , null );
} else
if (isMediaDocument(uri)) { // MediaProvider <br> final String docId = DocumentsContract.getDocumentId(uri);
final
String[] split = docId.split( ":" );
final
String type = split[ 0 ];
Uri contentUri = null ;
if
( "image" .equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else
if ( "video" .equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else
if ( "audio" .equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final
String selection = "_id=?" ;
final
String[] selectionArgs = new
String[] {
split[ 1 ]
};
return
getDataColumn(context, contentUri, selection, selectionArgs);
}
} else
if ( "content" .equalsIgnoreCase(uri.getScheme())) { // MediaStore (and general)
// Return the remote address
if
(isGooglePhotosUri(uri))
return
uri.getLastPathSegment();
return
getDataColumn(context, uri, null , null );
} else
if ( "file" .equalsIgnoreCase(uri.getScheme())) { // File<br> return uri.getPath();
}
return
null ;
} /** * Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/ public
static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null ;
final
String column = "_data" ;
final
String[] projection = {
column
};
try
{
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null );
if
(cursor != null
&& cursor.moveToFirst()) {
final
int index = cursor.getColumnIndexOrThrow(column);
return
cursor.getString(index);
}
} finally
{
if
(cursor != null )
cursor.close();
}
return
null ;
} /** * @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/ public
static boolean isExternalStorageDocument(Uri uri) {
return
"com.android.externalstorage.documents" .equals(uri.getAuthority());
} /** * @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/ public
static boolean isDownloadsDocument(Uri uri) {
return
"com.android.providers.downloads.documents" .equals(uri.getAuthority());
} /** * @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/ public
static boolean isMediaDocument(Uri uri) {
return
"com.android.providers.media.documents" .equals(uri.getAuthority());
} /** * @param uri The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/ public
static boolean isGooglePhotosUri(Uri uri) {
return
"com.google.android.apps.photos.content" .equals(uri.getAuthority());
} |