Intent.ACTION_GET_CONTENT с Google Диском

У меня есть следующее намерение:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, DBOpenHelper.REQUEST_CODE_RESTORE);

Это намерение позволяет пользователю выбрать текстовый файл из нескольких вариантов. Например, он отлично работает с локальным хранилищем и Dropbox, и в обоих случаях я могу получить файл следующим образом:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if ((requestCode == DBOpenHelper.REQUEST_CODE_RESTORE)
            && (resultCode == Activity.RESULT_OK)) {
        restoreFile = new File(data.getData().getPath());
        restoreFileName = restoreFile.getName();
    }
}

Локальное хранилище работает нормально, и Dropbox скопирует локальную копию файла на SD-карту и вернет правильный путь. Проблема в том, что если пользователь выбирает файлы с Google Диска. Когда они используют Google Диск, data.getData().getPath() возвращает что-то вроде: "/document/acc=1;doc=195" вместо возврата пути к локально сохраненному файлу. Как заставить Google Диск загрузить файл и вернуть путь? Я хочу, чтобы пользователь мог выбирать из любого доступного варианта хранения файлов.


person goodnoodle    schedule 04.01.2015    source источник


Ответы (1)


Google Диск может загрузить или не загрузить файл локально, когда пользователь выбирает файл. Однако во всех случаях вы можете получить доступ к содержимому файла через getContentResolver().openInputStream(data.getData()) — обратите внимание, что openInputStream() также поддерживает локальные файлы и может и должен использоваться и в других случаях.

person ianhanniballake    schedule 04.01.2015
comment
Благодарю вас! Это намного проще! - person goodnoodle; 06.01.2015