Skip to content

3、下载图片或视频的使用说明

FlyJingFish edited this page May 29, 2023 · 39 revisions

一、使用要求

添加权限

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

如果您引用的库是 OpenImageLib 您需要实现 DownloadMediaHelper 接口并设置它,它是下载图片和视频的关键

(如果您使用的是 OpenImageFullLib 或 OpenImageGlideLib 则不需要这一步)

public class MyDownloadMediaHelper implements DownloadMediaHelper {
    @Override
    public void download(FragmentActivity activity, LifecycleOwner lifecycleOwner, OpenImageUrl openImageUrl, OnDownloadMediaListener onDownloadMediaListener) {
        something...
    }

}

然后通过 OpenImageConfig 来设置

OpenImageConfig.getInstance().setDownloadMediaHelper(new MyDownloadMediaHelper());

二、再来看下使用方法

首先看下如何使用下载功能,调用 setShowDownload(),如下:

OpenImage.with(context)
        .setShowDownload()
        .show();
//或者如下,可定制下载按钮
OpenImage.with(context)
        .setShowDownload(new DownloadParams()
                .setDownloadSrc(R.drawable.ic_open_image_download)
                .setPercentColor(Color.RED)
                .setTouchingHide(false))
        .show();

三、如果需要显示下载进度

可以看到上边使用到了 setPercentColor 说明是可以看到下载进度的,但若想要显示进度,需要你先要设置下 Glide ,如下

通常只有视频才会看到下载进度,另外 m3u8 格式的视频是下载不下来的。(如果是Picasso点此查看MyApplication.initPicasso())

@GlideModule
public class MyAppGlideModule extends AppGlideModule {

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        //Glide 底层默认使用 HttpConnection 进行网络请求,这里替换为 Okhttp 后才能使用本框架,进行 Glide 的加载进度监听
        registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(LoadImageUtils.INSTANCE.getOkHttpClient()));
    }

    @Override
    public boolean isManifestParsingEnabled() {
        return false;
    }
}

重要的是要使用 LoadImageUtils.INSTANCE.getOkHttpClient()

四、如果需要更改下载时相关的 Toast

1、全局设置

app 的 module 下覆盖现有的字符串

<resources>
    <string name="download_start_toast">开始下载</string>
    <string name="download_end_toast">成功保存到: %1$s</string>
    <string name="download_error_toast">下载失败</string>
    <string name="request_WRITE_EXTERNAL_STORAGE_permissions_fail">请打开存储权限</string>
</resources>

2、局部设置

<style name="MyPhotosTheme" >
    <!--下载时是否显示 Toast 的总开关-->
    <item name="openImage.download.toast">true</item>
    <!--下载开始时 Toast 的文案,文案为空时不显示-->
    <item name="openImage.download.startToast">开始下载</item>
    <!--下载结束时 Toast 的文案,文案为空时不显示-->
    <item name="openImage.download.successToast">成功保存到%1$s</item>
    <!--下载失败时 Toast 的文案,文案为空时不显示-->
    <item name="openImage.download.errorToast">下载失败</item>
    <!--请求读取外部存储权限失败时的文案,文案为空时不显示-->
    <item name="openImage.requestWriteExternalStoragePermissionsFail">请打开存储权限</item>
</style>

然后在打开大图的位置设置上

OpenImage.with(context).setOpenImageStyle(R.style.MyPhotosTheme)

特别说明一下,openImage.download.successToast 如果想要显示下载的路径 ,则给字符串上加入 %1$s 即可

例如: “ 成功保存到 %1$s ”,如果不需要去掉即可

五、如果想要使用 Picasso 或其他图片引擎

前往查看代码点此查看相关代码

Clone this wiki locally