How to get file path in onActivityResult in Android 4.4

前端 未结 1 987
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-29 17:07

For android 4.3 and earlier I use this metod:

Uri myUri = data.getData();
Cursor cursor = getContentResolver().query(myUri,new String []{\"_data\"}, null, nu         


        
相关标签:
1条回答
  • 2020-12-29 17:38
                import android.content.ContentUris;
                import android.content.Context;
                import android.database.Cursor;
                import android.net.Uri;
                import android.os.Build;
                import android.os.Environment;
                import android.provider.DocumentsContract;
                import android.provider.MediaStore;
    
                public class ImageFilePath {
    
                    /**
                     * Method for return file path of Gallery image
                     * 
                     * @param context
                     * @param uri
                     * @return path of the selected image file from gallery
                     */
                    public static String getPath(final Context context, final Uri uri) {
    
                        // check here to KITKAT or new version
                        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];
                                }
                            }
                            // DownloadsProvider
                            else if (isDownloadsDocument(uri)) {
    
                                final String id = DocumentsContract.getDocumentId(uri);
                                final Uri contentUri = ContentUris.withAppendedId(
                                        Uri.parse("content://downloads/public_downloads"),
                                        Long.valueOf(id));
    
                                return getDataColumn(context, contentUri, null, null);
                            }
                            // MediaProvider
                            else if (isMediaDocument(uri)) {
                                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);
                            }
                        }
                        // MediaStore (and general)
                        else if ("content".equalsIgnoreCase(uri.getScheme())) {
    
                            // Return the remote address
                            if (isGooglePhotosUri(uri))
                                return uri.getLastPathSegment();
    
                            return getDataColumn(context, uri, null, null);
                        }
                        // File
                        else if ("file".equalsIgnoreCase(uri.getScheme())) {
                            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());
                    }
                }
    
    
                    onActivityResult you have to write
    
                    @Override
                    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    
                        super.onActivityResult(requestCode, resultCode, data);
                        if (resultCode == Activity.RESULT_OK) {
                            if (requestCode == SELECT_PHOTO) {
                                if (null == data)
                                    return;
    
    
                                Uri selectedImageUri = data.getData();
                                System.out.println(selectedImageUri.toString());
                                // MEDIA GALLERY
                                selectedImagePath = ImageFilePath.getPath(
                                        getActivity(), selectedImageUri);
                                Log.i("Image File Path", "" + selectedImagePath);
                                System.out.println("Image Path ="+selectedImagePath);
                                if(selectedImagePath!=null&&!selectedImagePath.equals(""))
                                {
                                    uploadImageOnServer upImg = new uploadImageOnServer();
                                    upImg.execute();
                                }
                                else
                                {
                                    AlertDialogManager alDailog = new AlertDialogManager(getActivity(), "Image Upload", "Please Select Valid Image", 0);
                                    alDailog.showDialog();
                                }
    
    
    
                            }
                        }
    
                    }
    
    0 讨论(0)
提交回复
热议问题