-
Notifications
You must be signed in to change notification settings - Fork 44
3、下载图片或视频的使用说明
FlyJingFish edited this page Jul 3, 2023
·
39 revisions
添加权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<!-- Android 13版本适配,细化存储权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
</manifest>
如果您引用的库是 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 格式的视频是下载不下来的)
只有使用的是 OpenImageFullLib 或 OpenImageGlideLib 设置此项才有用
@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()
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>
<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 ”,如果不需要去掉即可
新建 MyBigImageActivity 继承自 OpenImageActivity
public class MyBigImageActivity extends OpenImageActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addOnSelectMediaListener((openImageUrl, position) -> {
});
}
/**
* 点击下载按钮的方法
*/
@Override
protected void checkPermissionAndDownload() {
//重写这个方法可自己检测权限并调用downloadMedia下载
}
/**
* 下载当前图片或视频的方法
*/
@Override
protected void downloadMedia() {
//重写这个方法更改下载相关逻辑,例如:
....
final OpenImageUrl openImageUrl = openImageAdapter.getData().get(getViewPager2().getCurrentItem());
....
}
}
然后调用显示即可,点此查看详细说明
OpenImage.with(context).setOpenImageActivityCls(MyBigImageActivity.class)
— 前往查看代码下载器对应着步骤一 PicassoDownloader
-
如果是想要下载进度对应着步骤三 点此查看MyApplication.initPicasso()
-
其他可参考项目内的代码自行完成