当前位置: 首页 > news >正文

外贸网站交易平台wap企业网站源码

外贸网站交易平台,wap企业网站源码,上海闵行区兼职网,婺源网站建设wyjcwl相关文章 【重生之我在学Android原生】ContentProvider(Java) 【重生之我在学Android原生】Media3 【重生之我在学Android】WorkManager #xff08;章一#xff09; 前言 官方文档 官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现 案例 语言#xff1a;JA…相关文章 【重生之我在学Android原生】ContentProvider(Java) 【重生之我在学Android原生】Media3 【重生之我在学Android】WorkManager 章一 前言 官方文档 官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现 案例 语言JAVA 实现要求 一步步实现一个图片压缩APP 创建项目 添加WorkManager依赖 参考文章 添加到builder.gradle, sync一下 val workVersion 2.9.0implementation(androidx.work:work-runtime:$workVersion)接收share来的图片数据 要实现这种效果需要在AndroidManifest.xml声明标签过滤intent intent-filteraction android:nameandroid.intent.action.SEND /category android:nameandroid.intent.category.DEFAULT /data android:mimeTypeimage/* //intent-filter将Activity改为singleTop 运行APP。打开手机相册分享一张图片会重新使用这个Activity android:launchModesingleTop在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.InputStream;public class ImageCompressionWorker extends Worker {private final String TAG worker - log;public static final String KEY_CONTENT_URI KEY_CONTENT_URI;public static final String KEY_COMPRESSION_THRESHOLD KEY_COMPRESSION_THRESHOLD;public static final String KEY_RESULT_PATH KEY_RESULT_PATH;private final WorkerParameters workerParameters;private final Context appContext;public ImageCompressionWorker(NonNull Context context, NonNull WorkerParameters workerParams) {super(context, workerParams);appContext context;workerParameters workerParams;}NonNullOverridepublic Result doWork() {Data inputData workerParameters.getInputData();String uriStr inputData.getString(KEY_CONTENT_URI);long size inputData.getLong(KEY_COMPRESSION_THRESHOLD, 0L);assert uriStr ! null;Uri uri Uri.parse(uriStr);byte[] bytes;try {InputStream inputStream appContext.getContentResolver().openInputStream(uri);assert inputStream ! null; // byte[] bytes_ inputStream.readAllBytes();bytes new byte[inputStream.available()];inputStream.read(bytes);Bitmap bitmap BitmapFactory.decodeByteArray(bytes, 0, bytes.length);inputStream.close();int quality 100;byte[] byteArray;do {ByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream);byteArray byteArrayOutputStream.toByteArray();quality - Math.round(quality * 0.1);} while (byteArray.length size quality 5);File file new File(appContext.getCacheDir(), workerParameters.getId() .jpg);FileOutputStream fileOutputStream new FileOutputStream(file);fileOutputStream.write(byteArray);fileOutputStream.close();String absolutePath file.getAbsolutePath();Data outputData new Data.Builder().putString(KEY_RESULT_PATH, absolutePath).build();return Result.success(outputData);} catch (IOException e) {throw new RuntimeException(e);}} }// MainActivity.java package com.test.imagecompressionworkerapplication;import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.work.Data; import androidx.work.OneTimeWorkRequest; import androidx.work.OutOfQuotaPolicy; import androidx.work.WorkInfo; import androidx.work.WorkManager;import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.ImageView;import java.util.UUID;public class MainActivity extends AppCompatActivity {private final String TAG mainActivity - log;private WorkManager workManager;private ImageView sharedImage;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);workManager WorkManager.getInstance(this);bindView();}Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);Uri uri;if (android.os.Build.VERSION.SDK_INT android.os.Build.VERSION_CODES.TIRAMISU) {uri intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri.class);} else {uri intent.getParcelableExtra(Intent.EXTRA_STREAM);}assert uri ! null;long size 1024 * 20L;Data inputData new Data.Builder().putString(ImageCompressionWorker.KEY_CONTENT_URI, uri.toString()).putLong(ImageCompressionWorker.KEY_COMPRESSION_THRESHOLD, size).build();OneTimeWorkRequest oneTimeWorkRequest new OneTimeWorkRequest.Builder(ImageCompressionWorker.class).setInputData(inputData) // .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST).build();workManager.enqueue(oneTimeWorkRequest);UUID id oneTimeWorkRequest.getId();workManager.getWorkInfoByIdLiveData(id).observe(this, workInfo - {if (workInfo.getState() WorkInfo.State.SUCCEEDED) {Data outputData workInfo.getOutputData();String filePath outputData.getString(ImageCompressionWorker.KEY_RESULT_PATH);Bitmap bitmap BitmapFactory.decodeFile(filePath);sharedImage.setImageBitmap(bitmap);}});}private void bindView() {sharedImage findViewById(R.id.sharedImage);} }更多内容 这一节有些流水账看看就好 可以直接看官方文档吧 官方文档 执行加急工作 配额策略 加急工作 CoroutineWorker 通知 加急工作需要配合通知使用否则会报错 将之前的继承Worker改为CoroutineWorker 重写方法getForegroundInfo NullableOverridepublic Object getForegroundInfo(NonNull Continuation? super ForegroundInfo $completion) {return new ForegroundInfo(NOTIFICATION_ID, createNotification());}private Notification createNotification() {String CHANNEL_ID compressor_channel_id;String CHANNEL_NAME 压缩图片通知通道;String NOTIFICATION_TITLE 你有一个程序在压缩图片;int importance NotificationManager.IMPORTANCE_HIGH;NotificationChannel notificationChannel;if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {notificationChannel new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, importance);NotificationManager notificationManager getSystemService(appContext, NotificationManager.class);assert notificationManager ! null;notificationManager.createNotificationChannel(notificationChannel);}String NOTIFICATION_TEXT 压缩中...;Intent intent new Intent(appContext, ImageCompressionWorker.class);PendingIntent pendingIntent PendingIntent.getActivity(appContext, 0, intent, PendingIntent.FLAG_IMMUTABLE);return new NotificationCompat.Builder(appContext, CHANNEL_ID).setContentTitle(NOTIFICATION_TITLE).setContentText(NOTIFICATION_TEXT).setSmallIcon(R.drawable.ic_launcher_background).setContentIntent(pendingIntent).build();}通知 在Android 12 之前的版本运行会有通知显示 通知需要申请权限 uses-permission android:nameandroid.permission.POST_NOTIFICATIONS/private static final String[] PERMISSION_REQUIRED new String[]{Manifest.permission.POST_NOTIFICATIONS};Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);workManager WorkManager.getInstance(this);bindView();if (!checkAllPermissions()) {requestPermissions(PERMISSION_REQUIRED, REQUEST_CODE);}}private boolean checkAllPermissions() {for (String permission : PERMISSION_REQUIRED) {int permissionCheck ContextCompat.checkSelfPermission(this, permission);if (permissionCheck PackageManager.PERMISSION_DENIED) {return false;}}return true;}运行项目 压缩过程很快压缩完成之后通知关闭了 调度定期工作 每间隔一小时的最后15分钟工作一次 为了方便测试这里使用15分钟一次 WorkRequest uploadRequest new PeriodicWorkRequest.Builder(PeriodicUploadLogWorker.class, 15, TimeUnit.MINUTES, 15, TimeUnit.MINUTES).build();WorkManager workManager WorkManager.getInstance(this);workManager.enqueue(uploadRequest);public class PeriodicUploadLogWorker extends Worker {private final String TAG periodic_upload_log;public PeriodicUploadLogWorker(NonNull Context context, NonNull WorkerParameters workerParams) {super(context, workerParams);}NonNullOverridepublic Result doWork() {uploadLog();return Result.success();}private void uploadLog() {Log.i(TAG, String.valueOf(System.currentTimeMillis()));} }工作约束 将工作延迟到满足最佳条件时运行 延迟工作 重试和退避政策 标记工作 分配输入数据 setInputData 传入数据 getInputData 获取数据 唯一工作 查询工作 按id、name、tag查询 WorkQuery 取消工作 链接工作 将每个Worker链接起来按顺序执行。 还可以定义合并器 默认合并器变量名一致的值采用最新的覆盖前者 第二种会保留返回的结果会合并相同变量名到一个数组中 长时间运行worker 观察Worker的中间进度 更新工作
http://www.zqtcl.cn/news/512098/

相关文章:

  • 南阳网站建设域名公司泉州关键词排名seo
  • 网站建设在线推广宁夏快速自助制作网站
  • 专业网站建设好不好wordpress编辑文章更新失败
  • 河南郑州网站建设哪家公司好html5 网站正在建设中
  • 免费ppt模板下载医学类江门seo网站推广
  • 智慧软文网站群辉wordpress地址
  • 自己怎么做拼单网站外贸网站 源码
  • 做网站如何防止被黑网页无法访问如何解决360浏览器
  • 专门做设计的网站互联网运营培训班哪个好
  • 烟台网站建设网站推广做网站与数据库的关系
  • 深圳网站设计成功刻成全视频免费观看在线看第7季高清
  • 淮阳城乡建设局网站seo技术团队
  • 建设博客网站游戏交易类网站seo怎么做
  • 做系统软件的网站wordpress网站会员太多
  • 上海门户网站怎么登录网站开发竞价单页
  • 东莞市外贸网站建设公司软件开发 系统开发 网站开发服务
  • 泉州制作网站设计南宁网站排名外包
  • 南通网站建设入门wordpress google seo
  • 怎么建立图片的网站吗网站响应式是什么意思
  • 网站建设买了服务器后怎么做WordPress多城市
  • 网站建设凭证成都网站设计公司
  • 创新创业营销策略网站建设等做钢材的都用什么网站
  • 英文免费网站模板大庆+网站建设
  • 品牌网站建设内容框架网站首页收录没了
  • 湖南城乡住房建设厅网站网站图片切换效果
  • 凡科做的网站可以在百度搜到吗阿里云nas做网站
  • 做企业销售分析的网站更改wordpress传文件尺寸
  • 网站建设策划书封面知名企业名称
  • 中小企业网站建设与管理课件百度云济南高端网站建设公司
  • 台州企业建站程序网页设计素材网站知乎