我差不多完成了我正在制作的玩具应用游戏。
问题: 我的通知总是显示我的计数器是30000.为什么不是时间减少?
我做了什么: 我已经实现了一个简单的Service类和一个自定义计时器来打勾。最终,一旦我确定计时器正在运行,我将退出整个游戏。
这是我的代码:
package com.example.redshirtmarblez;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.CountDownTimer;
import android.os.IBinder;
import android.widget.Toast;
public class TimingService extends Service{
public long counter = 30000;
private Context ctx;
private Activity localActivity;
private NotificationManager nm;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
super.onCreate();
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
declareNotification();
timer.start();
//Toast.makeText(this, "Timer is :" + counter, Toast.LENGTH_LONG).show();
//showNotification();
}
public void getActivity(Activity activity)
{
localActivity = activity;
}
//count to end the game
public CountDownTimer timer = new CountDownTimer(30000, 1000){
public void onTick(long millisUntilFinished){
counter = millisUntilFinished / 1000;
}
public void onFinish(){
counter = 0;
//Kill the game
int i = android.os.Process.myPid();
android.os.Process.killProcess(i);
}
};
/*
* Show a notification while this service is running
*/
public void declareNotification()
{
//Declare a new notification
Notification notification = new Notification(R.drawable.ic_launcher, "A New Notification", System.currentTimeMillis());
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
Intent intent = new Intent(this, TimingService.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this, "herp", "counter: " + counter, activity);
//This is clearly not 1337, but a good joke
startForeground(1337, notification);
}
}
运行时所有这一切都显示“新通知”,然后更改为“herp counter:30000”。但是,此通知永远不会更改。它只剩下30000.为什么?我以为我修正了这个标志正在进行中?
答案 0 :(得分:15)
将when字段显示为秒表。而不是作为一个时候呈现 时间戳,通知将显示自动更新 显示自何时起的分钟和秒数。显示时很有用 经过的时间(就像正在进行的电话)。计数器也可以设置 倒数时使用setChronometerCountDown(boolean)。
无需更新,取消setWhen()
值
NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_default_notification)
.setTicker("Ticker Text")
.setWhen(when) // the time stamp, you will probably use System.currentTimeMillis() for most scenarios
.setUsesChronometer(true)
.setContentTitle("Title Text")
.setContentText("Content Text");
答案 1 :(得分:4)
counter
不是参考;在您明确告知通知之前,通知不会使用其新值更新。
看看the documentation on updating an existing notification。您的ID在此1337
,因此您可以使用它来更新它。
事实上,您可能只能通过declareNotification()
方法再次致电onTick()
...但是,如果这不起作用,我建议您保留对{{1}}的引用{3}}对象(作为成员变量),然后更新它,并使用Notification
。
答案 2 :(得分:1)
我不知道你为什么要使用通知。但您需要不断更新通知。对于简单的修复添加
declareNotification();
在这一行下面:
counter = millisUntilFinished / 1000;
请注意,这不是编码它的好方法。实际上你应该传递一种只更新通知而不是“创建”新通知的方法。但是,只要它们具有相同的ID,就会替换另一个。 此外,只需使用更新的方式管理通知,请使用
NotificationCompat.builder b = new NotificationCompat.Builder(context);