幽映每白日,清辉照衣裳。这篇文章主要讲述获取选择选择器意图谷歌驱动器文件文件没有谷歌驱动器Api集成Android相关的知识,希望能为你提供帮助。
【获取选择选择器意图谷歌驱动器文件文件没有谷歌驱动器Api集成Android】我正在开发一个android应用程序,它在谷歌驱动器中调用getPickChooserIntent来获取一些文件,它可以正常使用图像而不是文档:
注意:我不是在谈论谷歌驱动API实现。
public static Intent getPickChooserIntent(
@NonNull Context context,
CharSequence title,
boolean includeDocuments,
boolean includeCamera) {List<
Intent>
allIntents = new ArrayList<
>
();
PackageManager packageManager = context.getPackageManager();
// collect all camera intents if Camera permission is available
if (!isExplicitCameraPermissionRequired(context) &
&
includeCamera) {
allIntents.addAll(getCameraIntents(context, packageManager));
}List<
Intent>
galleryIntents =
getGalleryIntents(packageManager, Intent.ACTION_GET_CONTENT, includeDocuments);
if (galleryIntents.size() == 0) {
// if no intents found for get-content try pick intent action (Huawei P9).
galleryIntents = getGalleryIntents(packageManager, Intent.ACTION_PICK, includeDocuments);
}
allIntents.addAll(galleryIntents);
Intent target;
if (allIntents.isEmpty()) {
target = new Intent();
} else {
target = allIntents.get(allIntents.size() - 1);
allIntents.remove(allIntents.size() - 1);
}// Create a chooser from the mainintent
Intent chooserIntent = Intent.createChooser(target, title);
// Add all other intents
chooserIntent.putExtra(
Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[allIntents.size()]));
return chooserIntent;
}
从getPickImageChooserIntent(Context)获取所选图像的URI将返回正确的URI。
public static Uri getPickImageResultUri(@NonNull Context context, @Nullable Intent data) {
boolean isCamera = true;
if (data != null &
&
data.getData() != null) {
String action = data.getAction();
isCamera = action != null &
&
action.equals(MediaStore.ACTION_IMAGE_CAPTURE);
}
return isCamera || data.getData() == null ? getCaptureImageOutputUri(context) : data.getData();
}
之后,我只找到像:
content://com.google.android.apps.docs.storage.legacy/enc%3D8HXM7NIDpCn_Ax78iaO3nB9azNXlIu4AOk2poROCD8xP19KU%0A
的URI此URI适用于ImageView中的图像和显示图像,如果那时我选择PDF或其他文档,那么它不起作用。
任何人都有任何想法从谷歌驱动器获取意图数据没有谷歌驱动器API集成?
谢谢
答案最后我做到了!
解:
@Override
@SuppressLint("NewApi")
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {Uri mUri = CropImage.getPickImageResultUri(this, data);
writeStreamToFile(getApplicationContext(),mUri,".pdf");
}
}
}
方法:
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
void writeStreamToFile(Context mContext, Uri mUri,String ext) {
if (mUri == null) {
return;
}String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = mContext.getContentResolver().query(mUri, filePathColumn, null, null, null);
String mCurrentPath = null;
if (cursor != null &
&
cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
mCurrentPath = cursor.getString(columnIndex);
cursor.close();
}if (TextUtils.isEmpty(mCurrentPath)) {
mCurrentPath = mUri.getPath();
}File storageDir = mContext.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
InputStream inputStream = null;
try {
inputStream = mContext.getContentResolver().openInputStream(mUri);
File file = File.createTempFile("pptFiles", ext, storageDir);
try (OutputStream output = new FileOutputStream(file)) {
byte[] buffer = new byte[4 * 1024];
// or other buffer size
int read;
while ((read = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
推荐阅读
- 如何从我的应用程序在MS-Excel或MS-Word - Android中打开excel,doc文件
- 如何使用Android Intent System在whatsapp上分享最少n人的文本
- 无法在AndroidManifest.xml中添加Intent
- android插入活动堆栈
- 在Android 4.2+上使用intent安装apk时启用降级
- 不是封闭的类错误Android Studio
- 将自定义ListView项目传递给Android中的其他活动
- 未找到Android活动异常(找不到处理Intent的活动)
- 在Push Notification Android上下载文件