我仍然是Android的新手,我正在努力改进我的通知进度条以使其更顺畅,不会为我的Pebble点燃一百万次更新并以"正确的方式"进行.此代码工作"正常",就像我使用它时,通知绘制和进度条按预期完成.
当我将Pebble手表设置为接受我的应用程序通知时,这对我来说成了一个问题.这导致每个上传的图像振动约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; }
Avanz.. 10
您可以使用正常工作的开源代码,通过Github访问它的想法:Progress Watch - Pebble的进度条表盘.如果您决定重用代码,我的建议是:
给予适当的信誉
如果您仍然发现某些内容可以改进,请通知作者
如果添加一些新功能,请创建一个分支并提交补丁
小智.. 5
我通过在第一个通知后设置进行中标记来解决此问题。
因此,请重新使用构建器,并在发送第一个通知之后,更新构建器,以使其创建正在进行的通知:
builder.setOngoing(true);
当然,这也意味着更新的通知将继续进行,http://developer.android.com/reference/android/app/Notification.Builder.html#setOngoing(boolean)
我通过在第一个通知后设置进行中标记来解决此问题。
因此,请重新使用构建器,并在发送第一个通知之后,更新构建器,以使其创建正在进行的通知:
builder.setOngoing(true);
当然,这也意味着更新的通知将继续进行,http://developer.android.com/reference/android/app/Notification.Builder.html#setOngoing(boolean)