1

在我的应用程序中,我使用通用图像下载器 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;
    }
4

3 回答 3

1

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

于 2013-09-03T09:16:50.600 回答
0

请在您的 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>

也请看看

如何使用 FLAG_GRANT_READ_URI_PERMISSION 授予对自定义内容提供者的临时访问权限

于 2013-09-03T08:58:34.127 回答
0

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

<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/>
于 2013-09-03T11:22:56.483 回答