Просмотр файлов с 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 и т.д.)