Google云端硬盘和ACTION_GET_CONTENT的安全例外情况

时间:2014-06-02 13:04:35

标签: android

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

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

意图代码如下所示:

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云端硬盘应用程序的最后一次更新是在5月8日

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

我的问题是,我可以用另一种方式实现驱动器集成,而不会显着改变用户体验,或者我只是处理异常并提出一个抱歉的警报对话框? 此外,最近对Drive应用程序的更新是否已经破坏了这一点,或者Drive更新的时间安排以及我的分析中出现此异常只是巧合?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。抛出异常是因为Google驱动器清单中存在导出错误以管理获取内容意图。使用它是不可靠的。最后,我使用了Google Drive API,详细信息您可以看到newOpenFileActivityBuilder()方法示例docs