Android Получить путь Uri к файлу с Google Диска

У меня есть этот код для загрузки файла в мое приложение, и когда файл открывается с помощью файлового менеджера, Dropbox или чего-либо еще, возвращаемый путь правильный, и я могу получить к нему доступ, у меня проблемы только с Google Диском, он возвращает какой-то путь, начинающийся с «exposed_content», и я никак не могу его «декодировать», я искал и не нашел способа, у кого-нибудь есть идеи?

if (resultCode == Activity.RESULT_OK) {
            if ((data != null) && (data.getData() != null)) {
                final Uri filePath;
                if (data.getDataString().startsWith("content")) {
                    filePath = getRealPathFromURI(getApplicationContext(), data.getData());
                } else {
                    filePath = data.getData();
                }
                // TODO bug with google drive
                if (filePath.getLastPathSegment() != null) {
                    tvSelectedFile.setText("File selected: " + filePath.getLastPathSegment());

                } else {
                    tvSelectedFile.setText("File can not be accessed, please try another way");
                }

            }
}

person Sartheris Stormhammer    schedule 10.02.2014    source источник


Ответы (1)


Используйте прикрепленный код... из результата onActivity вы получите контент uri... передайте этот uri данному методу...

public static String getGDriveDataColumn(Context context, Uri uri, String selection,
                                           String[] selectionArgs) {
    Cursor cursor = null;
    final String column = "_display_name";
    final String[] projection = {
        column
    };

    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
            return null;    

}
person Bytecode    schedule 29.02.2016
comment
что я должен передать как selection и selectionArgs? Я пытался передать нулевое значение, но получаю только имя файла, а не путь к файлу. - person jcesarmobile; 14.03.2016
comment
Я также хотел бы знать, о чем спрашивал @jcesarmobile. Из ответа непонятно. - person Nom1fan; 05.04.2016
comment
Да, я тестировал этот код. Он дает только имя файла - person FaisalAhmed; 02.05.2017