【问题标题】:SecurityException when downloading Images with the Universal-Image-Downloader使用 Universal-Image-Downloader 下载图像时出现 SecurityException
【发布时间】:2013-09-06 10:24:00
【问题描述】:

在我的应用程序中,我使用通用图像下载器 BaseImageDownloader 类来同步加载画廊的内容。对于来自 Imageloader.getInstance().loadImage 异步函数的相同内容,它不会给出任何安全异常并按原样加载图像但是当我尝试使用 BaseImageDownloader 同步下载它时(Imageloader.getInstance().loadImage() 也一样)我得到了这个安全异常

09-02 18:49:43.971: W/System.err(4244): java.lang.SecurityException: Permission Denial: reading com.android.gallery3d.provider.GalleryProvider uri content://com.google.android.gallery3d.provider/picasa/item/5879964074642783474 from pid=4244, uid=10064 requires com.google.android.gallery3d.permission.GALLERY_PROVIDER, or grantUriPermission()
09-02 18:49:43.971: W/System.err(4244):     at android.os.Parcel.readException(Parcel.java:1425)
09-02 18:49:43.971: W/System.err(4244):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
09-02 18:49:43.971: W/System.err(4244):     at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:148)
09-02 18:49:43.971: W/System.err(4244):     at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:617)
09-02 18:49:43.971: W/System.err(4244):     at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:717)
09-02 18:49:44.011: W/System.err(4244):     at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:614)
09-02 18:49:44.011: W/System.err(4244):     at android.content.ContentResolver.openInputStream(ContentResolver.java:449)
09-02 18:49:44.011: W/System.err(4244):     at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromContent(BaseImageDownloader.java:156)
09-02 18:49:44.011: W/System.err(4244):     at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)
09-02 18:49:44.011: W/System.err(4244):     at com.uploader.data.UploadImageData.decodeSampledBitmapFromStream(UploadImageData.java:80)

另外我搜索了代码,你没有在配置或其他地方获得任何许可,这是什么原因?

public Bitmap decodeSampledBitmapFromStream(String path, int reqWidth, int reqHeight) throws IOException {
        BaseImageDownloader downloader = new BaseImageDownloader(getApplicationContext());
        InputStream stream = downloader.getStream(path, null);
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(stream, new Rect(-1,-1,-1,-1), options);
        stream.close();
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

        options.inJustDecodeBounds = false;
        stream = downloader.getStream(path, null);
        Bitmap bitmap = BitmapFactory.decodeStream(stream, new Rect(-1,-1,-1,-1), options);
        stream.close();
        return bitmap;
    }

【问题讨论】:

    标签: java android universal-image-loader securityexception


    【解决方案1】:

    这不是 UIL see here 的错误。根据this 问题,您应该在第一次加载时将图像加载到内部存储中,然后从那里读取图像。

    【讨论】:

      【解决方案2】:

      请在您的 mainfest 中添加以下权限。

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      
      <uses-permission android:name="android.permission.INTERNET"></uses-permission>
      

      也请看一下

      How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION

      【讨论】:

      • 是的,他们添加了通用图像加载器,只有当我尝试使用基本图像下载器获取输入流时它才能正常工作
      • 我无法理解 UniversalImageLoader 在相同的内容图像上正常工作,它正在打开输入流并从内容中读取但是当我直接尝试使用 BaseImageDownloader 处理相同的内容时它失败了。??
      【解决方案3】:

      我添加了对 mainfest 的权限,它起作用了。但我不知道没有那个 UIL 怎么做??

      <uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/>
      

      【讨论】:

      • 我认为 UIL 没有修复它:github.com/coomar2841/image-chooser-library/issues/8。另外,我认为您可以通过将所需数据保存到您的应用程序中来克服这个问题(可能不是图像,而只是它的元数据),如果使用 URI 出现问题,您可以使用 filePath 作为后备来读取.我不确定,但也许您甚至不需要获取元数据,并且使用 ExifInterface 就足够了(取决于它是否有效以及您的需求是什么)。
      • 另外,顺便说一句,添加权限似乎没有帮助。尝试使用 Picasa 执行此操作,就像使用 Uris 从中获取图像一样。迟早你会遇到同样的异常。
      猜你喜欢
      • 1970-01-01
      • 2013-10-17
      • 2020-03-24
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2014-05-19
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多