Просмотр файлов с Google Android

Если кто-то может помочь, я буду действительно потрясающе. Я создаю приложение, где я пытаюсь получить доступ к моим файлам и отображать их в образе просмотра изображений.

У меня есть кнопка, и я добавляю onClickListener

iButton.setOnClickListener(new View.OnClickListener() {   
@Override
public void onClick(View view) {
   Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
   photoPickerIntent.setType("image/*");
   startActivityForResult(Intent.createChooser(photoPickerIntent, "Select Picture"), 1);
   }
 });

Цель дает мне 3 варианта: Галерея, Dropbox и Google Drive

Для галереи я могу получить доступ к файлу lis this и отобразить его в imageview

Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null,   null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
imageHolder.setImageBitmap(BitmapFactory.decodeFile(picturePath));

Для Dropbox я делаю это так:

imageHolder.setImageBitmap(BitmapFactory.decodeFile(selectedImage.getPath()));

Однако я не уверен, как это сделать для Google Drive. Я пытался сделать это, как в галерее, но получаю следующую ошибку.

E/BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException:/: open failed: EISDIR (это каталог)

Любая помощь будет очень оценена.

Ответы

Ответ 1

Правильный ответ был дан здесь: Файл чтения GET_CONTENT Google Диска

решение состоит в том, чтобы получить его из contentResolver как InputStream

Мой полный код для получения изображения из любого:

Uri selectedImage = imageReturnedIntent.getData();
if (selectedImage == null) {
    return;
}
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    mCurrentPhotoPath = cursor.getString(columnIndex);
    cursor.close();
}

if (TextUtils.isEmpty(mCurrentPhotoPath)) {
    mCurrentPhotoPath = selectedImage.getPath();
}
Bitmap bitmap = null;
if (imageReturnedIntent.getDataString() != null && imageReturnedIntent.getDataString().contains("docs.file")) {
    try {
        InputStream inputStream = getContentResolver().openInputStream(selectedImage);
        bitmap = BitmapFactory.decodeStream(inputStream);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

if (bitmap == null) {
    bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
}

Ответ 2

Да, это может быть как удар головой против стены. Из-за некоторых особенностей api на стороне диска вы можете столкнуться с трудностями при использовании ACTION_GET_CONTENT. Я закончил тем, что бросил хак для запуска из этого контекстного меню и просто использовал стандартный код интеграции. Удачи!

Ответ 3

В настоящий момент вы не можете использовать ACTION_GET_CONTENT на Google Диске. В старой версии Google была ошибочно поддержана Google. Но последняя версия Drive (1.1.470.15) была отключена, и ACTION_GET_CONTENT не выбрасывает диск в качестве опции.

Прочитайте ниже обсуждение проблемы.
https://productforums.google.com/forum/#!topic/drive/siSKHXdE-ao/discussion

Ответ 4

Если вы хотите открыть любой файл, который вы извлекли из Диска, тогда это можно сделать легко, используя ресурсы приложения Google Диска. Прежде всего установите приложение Google Диск с игрового рынка Установить Google Диск

После этого используйте этот код, чтобы открыть файл.

   FileID=file.getId();//it is your file ID which you want to display

  String url = "https://docs.google.com/file/d/"+FileID;
  Intent i = new Intent(Intent.ACTION_VIEW);
  i.setData(Uri.parse(url));
   startActivity(i);

Он отобразит ваш файл любого типа (изображение, pdf, doc, txt и т.д.)