【重生之我在学Android】WorkManager (章一)

相关文章

【重生之我在学Android原生】ContentProvider(Java)
【重生之我在学Android原生】Media3
【重生之我在学Android】WorkManager (章一)

前言

官方文档
在这里插入图片描述
官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现
在这里插入图片描述

案例

语言:JAVA

实现要求

一步步实现一个图片压缩APP

创建项目

在这里插入图片描述

添加WorkManager依赖

参考文章
在这里插入图片描述
添加到builder.gradle, sync一下
在这里插入图片描述

    val workVersion = "2.9.0"
    implementation("androidx.work:work-runtime:$workVersion")

接收share来的图片数据

在这里插入图片描述
要实现这种效果,需要在AndroidManifest.xml声明标签,过滤intent
在这里插入图片描述

<intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
            </intent-filter>

将Activity改为singleTop

运行APP。打开手机相册,分享一张图片,会重新使用这个Activity
在这里插入图片描述

android:launchMode="singleTop"

在onNewIntent接收数据

在这里插入图片描述

定义Worker

你需要做什么事情,你就定义一个Worker,指派它做事,做什么事,就在dowork里定义
dowork有三个返回,见图
在这里插入图片描述

传入Uri到Worker

参考这里
在这里插入图片描述
通过inputdata传入
在这里插入图片描述
在这里插入图片描述

Uri -> Bitmap

在这里插入图片描述
若有爆红位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

压缩图片直到图片的大小不超过XKB

传入图片的大小阀值
在这里插入图片描述
不断循环压缩,一直到图片的大小不超过20KB
在这里插入图片描述

生成文件

在这里插入图片描述
在这里插入图片描述

返回图片地址数据

构建Data,传值回去
在这里插入图片描述

监听Worker结果

在获取到WorkManager这个实例后
通过getWorkInfoByIdLiveData方法来监听workerrequest状态及结果返回
在这里插入图片描述

显示结果

在布局中,加入一张图片
在这里插入图片描述
在这里插入图片描述

Android版本 兼容问题

兼容低版本的Android系统
在这里插入图片描述
inputStream.readAllBytes() 需要在API 33之后使用
所以需要更改写法,来使低版本的Android系统使用
在这里插入图片描述

bytes = new byte[inputStream.available()];
             inputStream.read(bytes);

运行项目

请添加图片描述

完整代码

// ImageCompressionWorker
package com.test.imagecompressionworkerapplication;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.work.Data;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheng_er_sheng

打赏是什么?好吃么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值