Java @param selectionArgs(可选)查询中使用的选择参数。 * *@返回_数据列的值,该列通常是文件路径。 *@作者保尔伯克 */ 公共静态字符串getDataColumn(上下文上下文、Uri、字符串选择、, 字符串[]selectionAr

Java @param selectionArgs(可选)查询中使用的选择参数。 * *@返回_数据列的值,该列通常是文件路径。 *@作者保尔伯克 */ 公共静态字符串getDataColumn(上下文上下文、Uri、字符串选择、, 字符串[]selectionAr,java,android,gallery,Java,Android,Gallery,@param selectionArgs(可选)查询中使用的选择参数。 * *@返回_数据列的值,该列通常是文件路径。 *@作者保尔伯克 */ 公共静态字符串getDataColumn(上下文上下文、Uri、字符串选择、, 字符串[]selectionArgs){ 游标=空; 最后一个字符串列=“_数据”; 最终字符串[]投影={ 柱 }; 试一试{ cursor=context.getContentResolver().query(uri、投影、选择、selectionArgs、, 无效);

@param selectionArgs(可选)查询中使用的选择参数。 * *@返回_数据列的值,该列通常是文件路径。 *@作者保尔伯克 */ 公共静态字符串getDataColumn(上下文上下文、Uri、字符串选择、, 字符串[]selectionArgs){ 游标=空; 最后一个字符串列=“_数据”; 最终字符串[]投影={ 柱 }; 试一试{ cursor=context.getContentResolver().query(uri、投影、选择、selectionArgs、, 无效); if(cursor!=null&&cursor.moveToFirst()){ 如果(调试) DatabaseUtils.dumpCursor(cursor); final int column_index=cursor.getColumnIndexOrThrow(column); 返回cursor.getString(列索引); } }最后{ 如果(光标!=null) cursor.close(); } 返回null; } /** *从Uri获取文件路径。这将获得存储访问的路径 *框架文档,以及MediaStore和 *其他基于文件的内容提供者。
*
*调用者应在假定路径为本地路径之前检查路径是否为本地路径 *表示本地文件。 * *@param context是上下文。 *@param uri要查询的uri。 * *@作者保尔伯克 */ @TargetApi(Build.VERSION\u code.KITKAT) 公共静态字符串getPath(最终上下文,最终Uri){ 如果(调试) Log.d(标记+“文件-”, “权限:”+uri.getAuthority()+ ,片段:“+uri.getFragment()+ ,端口:“+uri.getPort()+ ,查询:“+uri.getQuery()+ ,方案:“+uri.getScheme()+ ,主机:“+uri.getHost()+ ,段:“+uri.getPathSegments().toString() ); 最终布尔值isKitKat=Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.KITKAT; //文档提供者 if(isKitKat&&DocumentsContract.isDocumentUri(context,uri)){ //LocalStorageProvider if(isLocalStorageDocument(uri)){ //路径是id 返回文档contract.getDocumentId(uri); } //外部存储提供程序 else if(isExternalStorageDocument(uri)){ 最终字符串docId=DocumentsContract.getDocumentId(uri); 最终字符串[]split=docId.split(“:”); 最终字符串类型=拆分[0]; if(“主”。相等信号情况(类型)){ 返回Environment.getExternalStorageDirectory()+“/”+split[1]; } //TODO处理非主卷 } //下载提供商 else if(isDownloadsDocument(uri)){ 最终字符串id=DocumentsContract.getDocumentId(uri); 最终Uri contentUri=ContentUris.withAppendedId( 解析content://downloads/public_downloads),长。价值(id)); 返回getDataColumn(上下文、contentUri、null、null); } //媒体提供商 else if(isMediaDocument(uri)){ 最终字符串docId=DocumentsContract.getDocumentId(uri); 最终字符串[]split=docId.split(“:”); 最终字符串类型=拆分[0]; uricontenturi=null; 如果(“图像”。等于(类型)){ contentUri=MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI; }else if(“视频”。等于(类型)){ contentUri=MediaStore.Video.Media.EXTERNAL\u CONTENT\u URI; }else if(“音频”。等于(类型)){ contentUri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI; } 最终字符串选择=“_id=?”; 最终字符串[]SelectionAgs=新字符串[]{ 拆分[1] }; 返回getDataColumn(上下文、contentUri、selection、selectionArgs); } } //MediaStore(和通用) else if(“content.equalsIgnoreCase(uri.getScheme())){ //返回远程地址 如果(iGoogle PhotoSuri(uri)) 返回uri.getLastPathSegment(); 返回getDataColumn(上下文、uri、null、null); } //文件 else if(“file.equalsIgnoreCase(uri.getScheme())){ 返回uri.getPath(); } 返回null; } /** *尝试从MediaStore检索给定Uri的缩略图。这 *不应在UI线程上调用。 * *@param上下文 *@param-uri *@param-mimeType * *@返回 *@作者保尔伯克 */ 公共静态位图getThumbnail(上下文上下文、Uri、字符串mimeType){ 如果(调试) Log.d(标记“试图获取缩略图”); 如果(!isMediaUri(uri)){ e(标记“您只能检索图像和视频的缩略图”); 返回null; } 位图bm=null; if(uri!=null){ final ContentResolver resolver=context.getContentResolver(); 游标=空; 试一试{ cursor=resolver.query(uri,null,null,null,null); if(cursor.moveToFirst()){ final int id=cursor.getInt(0); 如果(调试) Log.d(标签“Got thumb ID:+ID”); if(mimeType.contains(“视频”)){ bm=MediaStore.Video.Thumbnails.getThumbnail( 分解器, 身份证件
private static final int LOAD_IMAGE_RESULTS = 1;
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, LOAD_IMAGE_RESULTS);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == LOAD_IMAGE_RESULTS && resultCode == Activity.RESULT_OK && data != null) {
        Uri selectedImageURI = data.getData();
        String imageStringPath = FileUtils.getPath(activity, selectedImageURI);

        if (selectedImageURI != null && imageStringPath != null) {                
            //here you can do what ever you want
            //File imgFile = new File(imageStringPath);
            //...
        }
    }
}
/*
 * Copyright (C) 2007-2008 OpenIntents.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.your.package;

import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.util.Log;
import android.webkit.MimeTypeMap;

import java.io.File;

/**
 * @author Peli
 * @author paulburke (ipaulpro)
 * @version 2013-12-11
 */

/**
 * @edited by Jakub Kučera (Simplex Web Solutions s.r.o.)
 * @website http://simplex.ws
 * @version 18-01-2016
 */
public class FileUtils {
    public static final String AUTHORITY = "com.ianhanniballake.localstorage.documents";
    public static final String MIME_TYPE_AUDIO = "audio/*";
    public static final String MIME_TYPE_TEXT = "text/*";
    public static final String MIME_TYPE_IMAGE = "image/*";
    public static final String MIME_TYPE_VIDEO = "video/*";
    public static final String MIME_TYPE_APP = "application/*";
    public static final String HIDDEN_PREFIX = ".";
    /**
     * TAG for log messages.
     */
    static final String TAG = "FileUtils";
    private static final boolean DEBUG = false; // Set to true to enable logging

    private FileUtils() {
    } //private constructor to enforce Singleton pattern

    /**
     * Gets the extension of a file name, like ".png" or ".jpg".
     *
     * @param uri
     *
     * @return Extension including the dot("."); "" if there is no extension;
     * null if uri was null.
     */
    public static String getExtension(String uri) {
        if (uri == null) {
            return null;
        }

        int dot = uri.lastIndexOf(".");
        if (dot >= 0) {
            return uri.substring(dot);
        } else {
            // No extension.
            return "";
        }
    }

    /**
     * @return True if Uri is a MediaStore Uri.
     * @author paulburke
     */
    public static boolean isMediaUri(Uri uri) {
        return "media".equalsIgnoreCase(uri.getAuthority());
    }

    /**
     * @return The MIME type for the given file.
     */
    public static String getMimeType(File file) {

        String extension = getExtension(file.getName());

        if (extension.length() > 0)
            return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.substring(1));

        return "application/octet-stream";
    }

    /**
     * @return The MIME type for the give Uri.
     */
    public static String getMimeType(Context context, Uri uri) {
        File file = new File(getPath(context, uri));
        return getMimeType(file);
    }

    /**
     * @param uri The Uri to check.
     *
     * @return Whether the Uri authority is {AUTHORITY}.
     * @author paulburke
     */
    public static boolean isLocalStorageDocument(Uri uri) {
        return AUTHORITY.equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     *
     * @return Whether the Uri authority is ExternalStorageProvider.
     * @author paulburke
     */
    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.
     * @author paulburke
     */
    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.
     * @author paulburke
     */
    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());
    }

    /**
     * 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.
     * @author paulburke
     */
    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()) {
                if (DEBUG)
                    DatabaseUtils.dumpCursor(cursor);

                final int column_index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(column_index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    /**
     * Get a file path from a Uri. This will get the the path for Storage Access
     * Framework Documents, as well as the _data field for the MediaStore and
     * other file-based ContentProviders.<br>
     * <br>
     * Callers should check whether the path is local before assuming it
     * represents a local file.
     *
     * @param context The context.
     * @param uri     The Uri to query.
     *
     * @author paulburke
     */
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public static String getPath(final Context context, final Uri uri) {

        if (DEBUG)
            Log.d(TAG + " File -",
                    "Authority: " + uri.getAuthority() +
                            ", Fragment: " + uri.getFragment() +
                            ", Port: " + uri.getPort() +
                            ", Query: " + uri.getQuery() +
                            ", Scheme: " + uri.getScheme() +
                            ", Host: " + uri.getHost() +
                            ", Segments: " + uri.getPathSegments().toString()
            );

        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

        // DocumentProvider
        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
            // LocalStorageProvider
            if (isLocalStorageDocument(uri)) {
                // The path is the id
                return DocumentsContract.getDocumentId(uri);
            }
            // ExternalStorageProvider
            else 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
            }
            // 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;
    }


    /**
     * Attempt to retrieve the thumbnail of given Uri from the MediaStore. This
     * should not be called on the UI thread.
     *
     * @param context
     * @param uri
     * @param mimeType
     *
     * @return
     * @author paulburke
     */
    public static Bitmap getThumbnail(Context context, Uri uri, String mimeType) {
        if (DEBUG)
            Log.d(TAG, "Attempting to get thumbnail");

        if (!isMediaUri(uri)) {
            Log.e(TAG, "You can only retrieve thumbnails for images and videos.");
            return null;
        }

        Bitmap bm = null;
        if (uri != null) {
            final ContentResolver resolver = context.getContentResolver();
            Cursor cursor = null;
            try {
                cursor = resolver.query(uri, null, null, null, null);
                if (cursor.moveToFirst()) {
                    final int id = cursor.getInt(0);
                    if (DEBUG)
                        Log.d(TAG, "Got thumb ID: " + id);

                    if (mimeType.contains("video")) {
                        bm = MediaStore.Video.Thumbnails.getThumbnail(
                                resolver,
                                id,
                                MediaStore.Video.Thumbnails.MINI_KIND,
                                null);
                    } else if (mimeType.contains(FileUtils.MIME_TYPE_IMAGE)) {
                        bm = MediaStore.Images.Thumbnails.getThumbnail(
                                resolver,
                                id,
                                MediaStore.Images.Thumbnails.MINI_KIND,
                                null);
                    }
                }
            } catch (Exception e) {
                if (DEBUG)
                    Log.e(TAG, "getThumbnail", e);
            } finally {
                if (cursor != null)
                    cursor.close();
            }
        }
        return bm;
    }
}