[英]How can I add notification timer like whatsapp call notification?
I have a notification builder.我有一个通知生成器。 I want to add notification timer like whatsapp call notification.
我想添加像whatsapp呼叫通知这样的通知计时器。 So if I call updateNotifTime function, is not working.
因此,如果我调用 updateNotifTime 函数,则不起作用。
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, callChannelId)
.setSmallIcon(R.drawable.call_icon)
.setContentIntent(pendingIntent)
.setOngoing(true)
.setShowWhen(true)
.setWhen(System.currentTimeMillis())
.setPriority(NotificationCompat.PRIORITY_HIGH);
public void updateNotifTime() {
this.callingElapsedRunnable = new Runnable() {
@Override
public void run() {
elapsedTime += 1000;
String timer = DateUtils.calculateTime(elapsedTime);
builder.setWhen(elapsedTime);
callingElapsedHandler.postDelayed(this, 1000);
}
};
callingElapsedHandler.postDelayed(callingElapsedRunnable, 1000);
}
I have added custom layout for <5.0 sdk versions:我为 <5.0 sdk 版本添加了自定义布局:
< 5.0 < 5.0
public void startChronometer(String elapsedTime) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && builder != null) {
RemoteViews mContentView = new RemoteViews(context.getPackageName(), R.layout.call_notification);
//timerTxt
TextView timerTxt = new TextView(context);
timerTxt.setId(R.id.timerTxt);
//callTypeTxt
TextView callTypeTxt = new TextView(context);
callTypeTxt.setId(R.id.callType);
//calleeNameTxt
TextView calleeNameTxt = new TextView(context);
calleeNameTxt.setId(R.id.calleeName);
mContentView.setTextViewText(timerTxt.getId(), elapsedTime);
mContentView.setTextViewText(callTypeTxt.getId(), context.getString(R.string.call_in_progress));
builder.setCustomBigContentView(mContentView);
notificationManager.notify(CALL_NOTIFICATION_ID, builder.build());
}
}
other versions其他版本
builder.setUsesChronometer(true);
@Kishore Jethava Question: @Kishore Jethava 问题:
Intent intent = new Intent(mContext, YourActivity.class);
intent.putExtra("tappedTime", System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
private void sendNotification(String from, String messageText) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(from)
.setContentText(messageText)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
I solved this using a very simple method.我用一个非常简单的方法解决了这个问题。 My initial notification
我的初始通知
notification = new NotificationCompat.Builder(this, CALL_CHANNEL_ID)
.setContentText("Incoming Voice Call")
.setContentTitle(getDoctor().name)
.setSmallIcon(R.drawable.ic_baseline_call_received_24)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setShowWhen(true)
.setUsesChronometer(true)
.setFullScreenIntent(voicePendingIntent, true);
startForeground(1, notification.build());
store the timestamp when service started存储服务启动时的时间戳
public void startTimer() {
if (!isTimerRunning) {
startTime = System.currentTimeMillis();
isTimerRunning = true;
} else {
Log.e(TAG, "startTimer request for an already running timer");
}
}
every time you call elapsedTime(),(usually in the activity to get time), the notification gets updated.每次调用 elapsedTime() 时(通常在活动中获取时间),通知都会更新。
public long elapsedTime() {
if (isTimerRunning()) {
durationMillis = System.currentTimeMillis() - startTime;
notification.setWhen(startTime);
notification.setOnlyAlertOnce(true);
notificationManager.notify(1, notification.build());
return (durationMillis);
} else {
return 0;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.