- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AlarmManager 每 60 秒重复一次推送通知服务。因此,每 60 秒,服务发送一个新的推送通知,但时间(小时和分钟)错误:例如,如果服务从 00:39 开始,它发送时间 = 00:39 的推送通知;然后,在 60 秒后(所以当时钟在 00:40 时),服务会发送一个与第一个通知相同的新推送通知,并且它将“永远”在同一时间发送推送通知。
您可以在此图中看到该服务的行为方式
这里是我的代码(“ServicesDemo.java”调用名为“MyService.java”的服务):
ServicesDemo.java
public class ServicesDemo extends Activity implements OnClickListener {
Button buttonStart, buttonStop;
AlarmManager alarmManager;
PendingIntent pendingIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
Intent myIntent = new Intent(ServicesDemo.this , MyService.class);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
pendingIntent = PendingIntent.getService(ServicesDemo.this, 0, myIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000 , pendingIntent); //set repeating every 60 seconds
break;
case R.id.buttonStop:
alarmManager.cancel(pendingIntent);
break;
}
}
}
MyService.java
public class MyService extends Service {
private static final String TAG = "MyService";
NotificationManager NM;
Notification notify;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
NM=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notify=new Notification(android.R.drawable.
stat_notify_more,"Notification",System.currentTimeMillis());
PendingIntent pending=PendingIntent.getActivity(
getApplicationContext(),0, new Intent(),0);
// Hide the notification after its selected
notify.flags |= Notification.FLAG_AUTO_CANCEL;
notify.setLatestEventInfo(getApplicationContext(),"Title","Body",pending);
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
NM.notify(0, notify);
}
}
我对此感到很沮丧。有谁知道如何解决这个问题?每一个帮助将不胜感激:)
最佳答案
感谢FoggyDay的 suggestion ,我已经解决了我的问题:因为推送通知只是第一次构建到 onCreate() 方法中,很明显它的时间从未改变。我还使用了一种已弃用的方式来构建推送通知,但问题不是由此引起的。
所以我的代码可能会以两种方式更改:
1)以这种(已弃用)方式:
public class MyService extends Service {
private static final String TAG = "MyService";
NotificationManager NM;
Notification notify;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
NM=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notify=new Notification(android.R.drawable.
stat_notify_more,"Notification",System.currentTimeMillis());
PendingIntent pending=PendingIntent.getActivity(
getApplicationContext(),0, new Intent(),0);
// Hide the notification after its selected
notify.flags |= Notification.FLAG_AUTO_CANCEL;
notify.setLatestEventInfo(getApplicationContext(),"Title","Body",pending);
NM.notify(0, notify);
}
}
2) ...并以这种(更好的)方式:
public class MyService extends Service {
private static final String TAG = "MyService";
NotificationManager NM;
NotificationCompat.Builder mBuilder;
NotificationManager mNotificationManager;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
mNotificationManager.cancelAll();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icon)
.setContentInfo("Ciao!")
.setSubText("Hey!")
.setTicker("Hoy!")
.setContentTitle("My notification")
.setContentText("Hello World!");
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
mBuilder.setAutoCancel(true);
mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());
}
}
我不知道将 onCreate() 方法留空是否是一个好习惯,但它确实有效 :D 但是,我接受有关它的其他建议
关于android - AlarmManager 在发送第一个通知后不更新推送通知时间(小时和分钟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871234/
我想在每次触发 AlarmManager 时额外更改 Intent。这可能吗,我如何在 AlarmManager 触发后立即调用它? 代码: public void startCollector(){
public class AlarmManagerClass extends BroadcastReceiver { public static boolean haveInternet
我正在寻找执行简单任务的最有效方法。作为一名新的 android 开发人员,我不太确定这些策略中的哪一个在内存效率方面最适合我的应用程序。我想其中一些方法可能会导致我不知道的线程问题。 所有三个解决方
我的应用程序有一个实时模块,它应该每 60 秒 ping 服务器一次。否则,连接将断开,设备将需要重新连接。 第一次尝试是使用 Thread.Sleep 使 ping 线程以所需的频率运行。第二次尝试
我有一组在重启后需要保留的警报。我试过在启动接收器上使用,但它们不会重新启动。我不确定我是否了解启动接收器以及如何重新启动所有警报。我已经有一个接收器来接收我的通知,但不知道我是否可以使用同一个接收器
我有一个要在其中创建警报的 Android 应用程序。这是一个正常的闹钟,应该在指定的时间叫醒你。与任何警报一样,您还可以通过在创建警报时选择声音文件来指定它将使用哪种警报声音。 闹钟效果很好,它在正
我的任务是定期读取后端的手机传感器(例如 WiFi、加速度计)。 我目前的解决方案是使用 AlarmManager。 具体来说,我们有: 在“主”程序(一个 Activity )中,我们使用 Pend
public void SetAlarm(Context context, int sec) { AlarmManager am=(AlarmManager)context.getSyst
我已经通过警报管理器制作了简单的警报,问题是当插入很多秒时,它无法及时工作,这是我在这里声明的 这是代码 mo = ((Integer.parseInt(mons.getText().toStrin
我在应用程序中设置了一个闹钟,每 X 分钟触发一次通知。第一次有效,但随后就不重复了。 我正在开发的 API 是 API 18 (Android 4.3)。 MainActivity.class pu
我很难专心于对 AlarmManager 进行编程。 下面的代码几乎只是将当前日期分配给文本字段并获取一些 XML 并使用 setListAdapter 显示它。我希望这段代码在启动时运行,然后每 3
我对如何停止 AlarmManager 有疑问。我想在“x”小时开始并在“y”小时停止,由用户设置。我知道“.cancel”功能的存在,但不知道如何设置“y”小时内的停止时间。 创建时 final E
我的应用程序有一个 AlarmManager 设置为每 60 秒触发一次。它会触发一个 fragment ,该 fragment 检查当前时间并查找应用程序日历中当时是否有任何事件发生。它运行得很好,
我正在尝试安排使用 AlarmManager 调用的方法,但它似乎不起作用。我看过其他例子,但他们的例子不适合我。所以我认为这是我的代码中的一些内容。这是 AlarmManager 代码: Alarm
我将 AlarmManager 设置如下: Intent startIntent = new Intent(context, MyService.class); PendingIntent pend
我正在尝试使用警报管理器发出警报。应用程序运行时没有任何错误消息,但没有任何反应。 我尝试了来自developer.android.com的解决方案和来自stackoverflow的建议。我也尝试复制
public class background_alarm extends BroadcastReceiver { @Override public void onReceive(Context co
我编写了一个每天凌晨 5:22 运行的闹钟代码。该代码在第一个时间间隔内运行良好,但在第二个时间间隔内会在 24 小时之前触发。 我在 MainActivity 的 onCreate() 方法中添加了
我在这些类(class)中有两个类(class),A,B。他们两个我都有一个像下一个这样的警报管理器; class A{ PendingIntent sender; AlarmManager am
我在 9:00 和 21:00 有两个 AlarmManager,但只运行第二个闹钟。 ////////9:00am///////// Intent aviso = new Inten
我是一名优秀的程序员,十分优秀!