2013-03-02 30 views
5

Tôi đang sử dụng một RemoteView tùy chỉnh cho AndroidNotification và tôi muốn bắt chước hành vi của hệ thống.Định dạng thời gian thông báo của Android được cập nhật như thế nào?

Android cập nhật định dạng thời gian thông báo như thế nào - chúng có bao giờ thay đổi sau khi được đặt không? Làm thế nào tôi có thể bắt chước hành vi này?

+0

tôi một phần câu hỏi của tôi đã được trả lời. Tuy nhiên, điều đó không giải quyết được vấn đề của tôi. Tôi có một RemoteViews với chế độ xem tùy chỉnh (sử dụng setContent). Tôi muốn một ngày hoặc thời gian được hiển thị trong thông báo của tôi, bắt chước hành vi của Android gốc. Tôi sẽ đạt được điều này bằng cách sử dụng cuộc gọi API (DateUtils.formatSameDayTime). vấn đề là, oncesetTextViewText được tạo trên RemoteView và notificationManager.notify được gọi, đó là nó, văn bản là vĩnh viễn. Tôi muốn ngày hoặc giờ tự động thay đổi dựa trên thời gian đã qua (hơn 24 giờ sẽ hiển thị ngày). Hãy giúp tôi. –

Trả lời

0

Tôi không chắc bạn có đang tìm câu trả lời hay không, với điều kiện bạn đã tự cung cấp câu trả lời. Tuy nhiên, nếu bạn đang tìm kiếm để đạt được mục tiêu ban đầu của bạn, bạn có thể sẽ muốn

  • Rebuild các RemoteView bất cứ khi nào thay đổi thời gian (nó chỉ là cách dễ dàng hơn)
  • Thiết lập một BroadcastReceiver để bắt ve của đồng hồ để bạn biết khi nào thời gian đã thay đổi.

Vì vậy, một số mã một chút như thế này:

class MyCleverThing extends Service (say) { 

    // Your stuff here 

    private static IntentFilter timeChangeIntentFilter; 
    static { 
     timeChangeIntentFilter = new IntentFilter(); 
     timeChangeIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 
     timeChangeIntentFilter.addAction(Intent.ACTION_TIME_CHANGED); 
    } 

    // Somewhere in onCreate or equivalent to set up the receiver 
    registerReceiver(timeChangedReceiver, timeChangeIntentFilter); 

    // The actual receiver 
    private final BroadcastReceiver timeChangedReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (action.equals(Intent.ACTION_TIME_CHANGED) || 
      action.equals(Intent.ACTION_TIMEZONE_CHANGED)) 
     { 
      updateWidgets(); // Your code to rebuild the remoteViews or whatever 
     } 
    } 
}; 
+0

Một chút phức tạp nhưng là một giải pháp hợp pháp. –

+0

Đó là - nếu có một cách ít phức tạp hơn để thực hiện nó (và nó hoạt động thường xuyên vv ..) Tôi rất thích nhìn thấy nó. Cảm ơn cho đánh dấu và để thưởng, đánh giá cao nó. –

2

Tôi không biết nhiều về định dạng thời gian thông báo, nhưng nếu bạn muốn bắt chước hành vi của mình, hãy xem lớp DateUtils, đặc biệt là formatSameDayTime mà tôi nghĩ là bạn đã mô tả điều gì.

2

Không thể cập nhật thông báo sau khi được thêm trừ khi. Thông báo được gọi lại bằng cùng một ID.

Nếu xử lý dấu thời gian, tốt nhất là sử dụng Notification NotificationCompat.Builder gốc mà không sử dụng RemoteViews.

0

Mỗi lần bạn cập nhật thông báo của bạn, làm một cái gì đó đơn giản như này (thời gian 24 tiếng đồng hồ) ...

public void updateNotifTime(RemoteViews customNotifView){ 
    Date currentTime = new Date(); 
    int mins = currentTime.getMinutes(); 
    String minString = ""; 
    if(mins<10){ 
     minString = "0"; 
    } 
    minString += mins; 
    customNotifView.setTextViewText(R.id.time, currentTime.getHours()+":"+minString); 
} 
+0

Tôi muốn thông báo tự cập nhật dựa trên thời gian trôi qua, giống như thông báo gốc. –

Các vấn đề liên quan