我想创建一个警报应用程序,它会在您设置时间时发出警报。我已经让它部分工作了。在应用程序通过最近的托盘关闭后(我没有强制停止),我被警报器停留在警报状态。为了解决这个问题,我创建了一个将在后台运行的服务(即使应用程序已关闭)并且会发出警报。
我现在的问题是,即使在使用服务后,我也无法在应用关闭后发出警报。但是,该服务似乎在应用程序关闭后运行(我在运行应用程序时看到过。它说My App在后台运行了一个服务)。
注意:我还将服务与我的活动绑定在一起,以便我可以使用它的方法。
注意2:当应用程序打开时,服务会发出警报,但只有在应用程序关闭时才会响起。
这是我的代码:
从我的活动中调用服务:
public void startOnClick(View view) {
int aHour = alarmTimePicker.getCurrentHour();
int aMin = alarmTimePicker.getCurrentMinute();
Alarms alarm = new Alarms(aHour, aMin); //I've created an Alarms class Seperately
myService.setAlarm2(alarm); //Setting the alarm via service
Toast.makeText(this, "Alarm SET.", Toast.LENGTH_LONG).show();
}
在MyService中:`package com.wars.tap.tapwars;
公共类MyService扩展了Service {
private final IBinder myBinder = new MyBinder();
Alarms alarm = new Alarms();
private PendingIntent pendingIntent;
private AlarmManager alarmManager;
private ServiceCallBacks serviceCallbacks;
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
public class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
public void setCallbacks(ServiceCallBacks callbacks) {
serviceCallbacks = callbacks;
}
public void setAlarm2(final Alarms alarm){
Runnable r = new Runnable() {
@Override
public void run() {
try {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarm.get_hour());
calendar.set(Calendar.MINUTE, alarm.get_min());
AlarmManager AM = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MyService.this, AlarmReceiver.class);
i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
pendingIntent = PendingIntent.getBroadcast(MyService.this, 934, i, PendingIntent.FLAG_UPDATE_CURRENT);
AM.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
} catch (Exception e) {
}
}
};
Thread t = new Thread(r);
t.start();
}
}
`
因此,setAlarm2是我在服务中用来发出警报的方法。它在应用程序打开时有效,但在应用程序关闭时无法正常工作。正如你所看到的,这是我在StackOverflow上的第一篇文章,我也是android编程的新手。我已经坚持了很长一段时间,并希望得到一些帮助。谢谢。
答案 0 :(得分:0)
您的闹钟可能正在运行,但通知中心不知道允许您的应用获得任何权限以突出显示正在发生的事件。有关通知的详细信息,请查看此链接here。
修改强>
查看我从上一个项目中提取的以下代码。我遗漏了必要的部分:
public class MyClass extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onTaskRemoved(Intent rootIntent) {
// Input your code here prior to exit.
stopSelf();
}
}