11

私はまだAndroidには新しく、通知の進捗バーをスムーズに改善しようとしています。このコードは、私がそれを使用しているときに通知が描画され、プログレスバーが期待どおりに完了するように「きれいに」動作します。Android - 通知の進行状況バーが正しく更新されています

私のアプリの通知を受け入れるようにペブルの時計を設定すると、問題になりました。これにより、アップロード速度がどれくらい速いかに応じて、アップロードする画像あたり約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; 
} 
+0

私は問題は、通知を更新するたびにビルダーを再作成することだと思います。同じビルダーを使用しようとします。私はそれが助けると思う。 –

答えて

0

進捗状況を更新する行動が正しい

マイ通知のプログレスバーは、次のコードで更新されます。変更があるとすぐに更新されます。

ただし、UI部分のみを更新する必要があります(プログレスバーの更新など)。

バイブレーションを使用している場合は、バイブレーションを使用しない場合よりも通知してください。

+0

ありがとうございます。進捗バーの更新のみにはどうしたらいいですか? – Jayrox

10

Github:Progress Watch - A progress bar watchface for pebbleにアクセスすることを念頭に置いているアイデアに対して、適切に機能しているオープンソースコードを使用することができます。あなたがコードを再利用することを決定した場合には、私の提案があります:あなたはまだあなたには、いくつかの新しい機能を追加した場合、何かが

  • を向上させることができた見つけた場合

    • はフォークを作成し、作成者に通知し、適切な信用
    • を与えますパッチを提出する
  • 関連する問題