【问题标题】:Security Exception with Google Drive and ACTION_GET_CONTENTGoogle Drive 和 ACTION_GET_CONTENT 的安全异常
【发布时间】:2014-07-22 14:42:53
【问题描述】:

在我的应用中,用户可以导入声音、视频、图像和其他文件。 导入使用标准 Intent 完成,结果在 OnActivityResult 中提交

在我的 4.2.2 平板电脑上尝试从 Google Drive 导入文件时遇到安全异常,来自 Dropbox、Onedrive、Gallery 等其他来源的文件都可以正常工作。 从云端硬盘导入在我的 4.4 平板电脑上运行良好。

intent 代码如下所示:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, getString(R.string.title_dialog_selectphoto)), SELECT_PICTURE_REQUEST);

然后在我的 importPhotoFromUri(uri) 方法中,我尝试将 uri 作为 inputStream 打开:

...
InputStream is;
try {
    is = getContentResolver().openInputStream(uri);
....        

此时我得到一个安全异常:

java.lang.SecurityException: Permission Denial: opening provider
com.google.android.apps.docs.sync.filemanager.FileProvider 
from ProcessRecord{216d9060 18832:com.app.app/u0a10153}
(pid=18832, uid=10153) that is not exported from uid 10179

我发现一些帖子似乎提到了不久前的类似问题:

Google Drive + ACTION_GET_CONTENT

File View from Google Drive Android Intent

https://productforums.google.com/forum/#!topic/drive/siSKHXdE-ao/discussion

但这些似乎都没有解决方案,除了可能自己使用他们的 API 重新实现 Google Drive Integration。我宁愿避免这种情况并保持简单的用户体验。

从我的 Google Analytics(分析)中的异常跟踪来看,这个问题似乎主要影响运行 4.2.2 设备的用户,我只看到其他 Android 版本的 3 个安全异常。 在 5 月 9 日(2014 年)之前,我也几乎没有看到任何安全异常,这也是用户 igorcard 发表评论询问有关此答案的相同异常的日期: https://stackoverflow.com/a/18298298/2214992

我的 4.2.2 设备上的 Google Drive 应用的最后一次更新是在 5 月 8 日

通过尝试从我的云端硬盘加载图像,我也能够在其他应用中观察到同样的问题,而不仅仅是在我自己的应用中。

然后我的问题是,我能否以另一种方式实现驱动器集成,而不会显着改变用户体验,还是我只需要处理异常并设置一个道歉的警报对话框? 此外,最近对 Drive 应用程序的更新是否打破了这一点,或者 Drive 更新的时间和我的分析中此异常的发生只是巧合?

【问题讨论】:

  • 看起来这只是 版本 1.3.144.17 的错误。他们似乎已在 2014 年 6 月 18 日发布的最新版本 1.3.222.29 中修复了它(可能是明显的更改)。
  • 是的,我也看到了同样的情况。至少这两周我学到了很多关于 Drive SDK 的知识

标签: android


【解决方案1】:

我遇到了同样的问题。抛出异常是因为 Google 驱动器清单中有一个 export false 来管理获取内容意图。使用它是不可靠的。最后我使用了Google Drive API,详细你可以看newOpenFileActivityBuilder()方法一个例子docs

【讨论】:

  • 谢谢,我希望避免这种情况,这样我就可以保留简单的选择器菜单,让用户可以从所有可用位置(例如 Dropbox、Gallery 等)导入文件。
  • 我能理解。我有完全同样的问题,如果你想要一个可靠的方法,你必须实现它。然而,即使它比简单的意图更多的代码也不是很复杂。
  • 我已经听从了您的建议,并添加了一些内容。使用this tutorial,我制作了一个自定义意图选择器,仅在未导出 Drive FileProvider 的设备上显示。然后,此选择器按照建议使用 Drive SDK 和 newOpenFileActivityBuilder()。
  • 如果您没问题,请接受回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2013-11-18
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多