gpt4 book ai didi

android - future 通知的时间戳不正确

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:15 27 4
gpt4 key购买 nike

当我的应用程序启动时,它会执行 API 调用,然后根据结果安排通知。这相当于安排了大约 10 个通知。实际通知上显示的时间戳似乎不正确。

由于我正在创建这些通知,然后使用 AlarmManager 安排警报,因此通知中显示的默认时间将是创建通知的时间 (System.currentTimeMillis( )).

我尝试在我的 Notification.Builder 上使用 .setWhen() 方法将其设置为我用来安排前面提到的警报的时间。然而,这要好一些,因为不能保证通知在指定的确切时间送达,我经常在过去几分钟收到通知。

此外,我试图在 BroadcastReceiver 中手动覆盖通知上的 when 字段,就在实际调用 .notify() 之前:

public class NotificationPublisher extends BroadcastReceiver {

public static String NOTIFICATION_ID = "notification_id";
public static String NOTIFICATION = "notification";

public void onReceive(Context context, Intent intent) {

NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

Notification notification = intent.getParcelableExtra(NOTIFICATION);
notification.when = System.currentTimeMillis();
int id = intent.getIntExtra(NOTIFICATION_ID, 0);
notificationManager.notify(id, notification);

}
}

但是,在上面的场景中,似乎忽略了.when

坦率地说,我只是在寻找一种方法,让通知上显示的时间戳成为实际显示的时间。

最佳答案

我建议将您的通知信息作为附加信息传递,然后在 BroadcastReceiver 中构建通知。这将在通知发出之前构建通知,因此您的 AlarmManager 将在同一时间触发 BroadcastReceiver。

无论您在哪里安排通知:

private void scheduleNotification(){

// Create an intent to the broadcast receiver you will send the notification from
Intent notificationIntent = new Intent(this, SendNotification.class);

// Pass your extra information in
notificationIntent.putExtra("notification_extra", "any extra information to pass in");

int requestCode = 1;

// Create a pending intent to handle the broadcast intent
PendingIntent alarmIntent = PendingIntent
.getBroadcast(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

// Set your notification's trigger time
Calendar alarmStart = Calendar.getInstance();
alarmStart.setTimeInMillis(System.currentTimeMillis());
alarmStart.set(Calendar.HOUR_OF_DAY, 6); // This example is set to approximately 6am

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

// Set the alarm with the pending intent
// be sure to use set, setExact, setRepeating, & setInexactRepeating
// as well as RTC_WAKEUP, ELAPSED_REALTIME_WAKEUP, etc.
// where appropriate
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmStart.getTimeInMillis(), alarmIntent);
}

然后,在您的 BroadcastReceiver 的 onReceive 中:

String notificationExtra = null;

// Retrieve your extra data
if(intent.hasExtra("notification_extra")){
notificationExtra = intent.getStringExtra("notification_extra");
}

//Build the notification
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setSmallIcon(notificationIcon)
.setContentTitle(notificationTitle)
.setContentText(notificationMessage)
.setAutoCancel(true); // Use AutoCancel true to dismiss the notification when selected

// Check if notificationExtra has a value
if(notificationExtra != null){
// Use the value to build onto the notification
}

//Define the notification's action
Intent resultIntent = new Intent(context, MainActivity.class); // This example opens MainActivity when clicked

int requestCode = 0;

PendingIntent resultPendingIntent =
PendingIntent.getActivity(
context,
requestCode,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);

//Set notification's click behavior
mBuilder.setContentIntent(resultPendingIntent);

// Sets an ID for the notification
int mNotificationId = 1;

// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

// Builds the notification and issues it.
mNotifyMgr.notify(mNotificationId, mBuilder.build());

关于android - future 通知的时间戳不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41882060/

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