15

如果有人可以提供帮助,我会非常棒。我正在构建一个应用程序,我试图访问我的文件并将它们显示在图像视图中。

我有一个按钮,我附加了一个 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 个选项 Gallery、Dropbox 和 Google Drive

对于画廊,我可以访问文件 lis this 并将其显示在图像视图中

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()));

但是我不确定如何为谷歌驱动器做这件事我试着像画廊一样做,但我收到以下错误

E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/:打开失败:EISDIR(是一个目录)

任何帮助将不胜感激。

4

4 回答 4

3

正确答案最初在这里给出:Google Drive GET_CONTENT intent read file

解决方案是从 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);
}
于 2013-08-18T10:50:56.310 回答
2

是的,这就像用头撞墙一样。由于某些驱动端 api特性,您可能会在使用 ACTION_GET_CONTENT 时遇到麻烦。我最终抛出了一个黑客从该上下文菜单启动并使用标准集成代码。祝你好运!

于 2013-06-25T02:24:26.873 回答
1

现在您不能在 Google Drive 中使用 ACTION_GET_CONTENT。谷歌在旧版本中错误地支持它。但是最新版本的 Drive (1.1.470.15) 的意图已被禁用,并且 ACTION_GET_CONTENT 不会抛出 Drive 作为选项。

阅读下面的问题讨论。
https://productforums.google.com/forum/#!topic/drive/siSKHXdE-ao/discussion

于 2013-06-26T12:05:54.830 回答
1

如果您想打开从 Drive 中检索到的任何文件,则可以在使用 Google Drive 应用程序的资源时轻松完成。首先从 Play Market安装 Google Drive 应用 安装 Google Drive

之后使用此代码打开您的文件。

   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 等)

于 2014-04-08T17:25:45.250 回答