gpt4 book ai didi

Android - 正确更新通知进度条

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:13 24 4
gpt4 key购买 nike

我仍然是 Android 的新手,我正在努力改进我的通知进度条以使其更流畅,而不是对我的 Pebble 进行一百万次更新并以“正确的方式”进行。这段代码工作得“很好”,就像我在使用它时一样,通知绘制并且进度条按预期完成。

当我将我的 Pebble watch 设置为接受我的应用程序的通知时,这对我来说成了一个问题。这会导致它根据上传速度的快慢,每张图片振动大约 50 次。

作为初学者,我认为我做的这一切都是错误的,并且有更好的方法来做我想做的事情。

我的通知的进度条使用以下代码更新:

private int upload_progress;
private Long time_previous_progress = Calendar.getInstance().getTimeInMillis();

protected void onProgressUpdate(Integer... progress) {
Long time_now = Calendar.getInstance().getTimeInMillis();
if(
((time_now - time_previous_progress) < 55) // 55ms minimum delay
|| (progress[0] < 0 && progress[0] > 100) // progress >0 && <100
|| progress[0].equals(upload_progress) // progress changed
|| ! App.getStatus() // watcher is running
)
{
return;
}
time_previous_progress = time_now;
upload_progress = progress[0];
int upload_counter = getUploadCounter();
int upload_total = db.getReadyImagesCount();
NotificationHandler.notify(context, upload_progress, upload_counter, (upload_total + upload_counter));
}

然后使用以下代码生成通知:

public static int notify(Context context, Integer progress, Integer upload_count, Integer upload_total)
{
Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
String notif_title = context.getResources().getString(R.string.instant_upload_title);

String notif_progress = context.getResources().getString(R.string.instant_upload_progress);
String notif_ticker = String.format(notif_progress, upload_count, upload_total);
String notif_msg = String.format(notif_progress, upload_count, upload_total);

Intent intent_swipe = new Intent(context, NotifyReceiver.class);
intent_swipe.setAction("notification_cancelled");
PendingIntent pendingIntent_swipe = PendingIntent.getBroadcast(context, 0, intent_swipe, PendingIntent.FLAG_CANCEL_CURRENT);

Intent intent_click = new Intent(context, Settings.class);
intent_click.putExtra("notification_clicked", true);
PendingIntent pendingIntent_click = PendingIntent.getActivity(context, 0, intent_click, PendingIntent.FLAG_CANCEL_CURRENT);

int pro_max = 100;
int pro_cur = 0;
if(progress < 100)
{
pro_cur = progress;
}else{
pro_cur = pro_max = 0;
}

//new NotificationCompat.Builder(context)
NotificationCompat.Builder builder = new NotificationCompat.Builder(context) //PixelRelayApplication.getNotificationBuilder()
.setTicker(notif_ticker)
.setContentTitle(notif_title)
.setContentText(notif_msg)
.setNumber(upload_count)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(bm)
.setContentIntent(pendingIntent_click)
.setDeleteIntent(pendingIntent_swipe)
.setAutoCancel(true)
.setOngoing(true)
.setWhen(Calendar.getInstance().getTimeInMillis())
.setProgress(pro_max, pro_cur, false);

Notification notification = builder.build();

// Put the auto cancel notification flag
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFY_ME_ID, notification);
return NOTIFY_ME_ID;
}

最佳答案

您可以使用可以正常工作的开源代码来实现您的想法,通过 Github 访问它:Progress Watch - A progress bar watchface for pebble .如果您决定重用代码,我的建议是:

  • 给予适当的信任
  • 如果您仍然发现可以改进的地方,请通知作者
  • 如果你添加了一些新功能,创建一个分支并提交补丁

关于Android - 正确更新通知进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com