如果有人可以提供帮助,我会非常棒。我正在构建一个应用程序,我试图访问我的文件并在imageview中显示它们。
我有一个按钮,我附上一个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
对于Gallery,我可以访问文件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()));
但是我不确定如何为谷歌驱动器做这件事我试图像画廊那样做但我得到以下错误
E / BitmapFactory:无法解码流:java.io.FileNotFoundException:/:open failed:EISDIR(是目录)
非常感谢任何帮助。
答案 0 :(得分: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);
}
答案 1 :(得分:1)
是的,这可能就像把头靠在墙上。由于某些驱动端api idiosyncrasies,您可能会遇到使用ACTION_GET_CONTENT的问题。我最终投入了一个黑客从该上下文菜单启动,并使用了standard integration code。祝你好运!
答案 2 :(得分:1)
目前您无法在Google云端硬盘中使用ACTION_GET_CONTENT。谷歌在旧版本中错误地支持它。但最新版本的Drive(1.1.470.15)意图已被禁用,ACTION_GET_CONTENT不会将Drive作为选项。
请阅读以下问题讨论 https://productforums.google.com/forum/#!topic/drive/siSKHXdE-ao/discussion
答案 3 :(得分:0)
如果您要打开从云端硬盘检索到的任何文件,则可以在使用Google云端硬盘应用的资源时轻松完成此操作。首先从游戏市场Install Google Drive
安装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等)