Foreground Service设置indeterminate progress bar时setProgress参数如何配置
正确配置方案
当setProgress方法的第三个布尔参数(用于控制是否为不确定进度模式)设置为true时,前两个int参数直接传入0, 0即可,系统在不确定进度模式下会完全忽略这两个参数的取值,不会对进度条展示产生任何影响。
补充说明
- 只有当第三个参数设置为
false(确定进度模式)时,前两个参数才会生效,分别对应「进度总最大值」和「当前已完成进度」,比如要展示10%的进度可以写.setProgress(100, 10, false)。 - 你现有代码存在两个可优化点:
- 通知渠道只需在应用首次启动时创建一次即可,不需要每次生成通知都重复执行创建逻辑,多次调用创建方法不会报错但属于无效执行。
- 原代码中
notificationManager.notify调用写在了Android O及以上的判断分支里,会导致7.0及更低版本的系统收不到这条通知,需要把这行代码移到判断分支外面。
修正后的代码片段
public Notification createNotification() { NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_TEST) .setSmallIcon(R.drawable.ic_download_complete) .setContentTitle("Test title") .setContentText("Test content") // 不确定进度模式下直接填0,0即可 .setProgress(0, 0, true) .setPriority(NotificationCompat.PRIORITY_LOW) .setAutoCancel(true); NotificationManager notificationManager = this.getSystemService(NotificationManager.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( CHANNEL_TEST, "Test notification", NotificationManager.IMPORTANCE_LOW ); notificationManager.createNotificationChannel(channel); } notificationManager.notify(NOTIFICATION_ID, builder.build()); return builder.build(); }
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

