关闭应用后服务不启动警报

Posted

技术标签:

【中文标题】关闭应用后服务不启动警报【英文标题】:Service doesn't start alarm after closing the app 【发布时间】:2015-08-09 09:55:09 【问题描述】:

我想创建一个闹钟应用程序,它会在您设置时间时发出警报。我已经让它部分工作了。通过最近的托盘关闭应用程序后,我被困在没有设置警报(不是强制停止)。为了解决这个问题,我创建了一个服务,它将在后台运行(即使应用程序已关闭)并会发出警报。

我现在的问题是,即使在使用服务之后,应用程序关闭后我也无法发出警报。但是,该服务似乎在应用关闭后正在运行(我在运行应用中看到过。它说我的应用有一个服务在后台运行)。

注意:我还将服务与我的活动绑定,以便我可以使用它的方法。

注意2:应用程序打开时服务会发出警报,只有在应用程序关闭时才会发出警报。

这是我的代码:

从我的 Activity 调用服务:

    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 扩展服务

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 是我在服务中用来发出警报的方法。应用程序打开时它工作,但应用程序关闭时无法工作。如您所见,这是我在 *** 上的第一篇文章,而且我也是 android 编程新手。我已经坚持了很长时间,希望能得到一些帮助。谢谢。

【问题讨论】:

【参考方案1】:

您的警报可能正在工作,但通知中心不知道您的应用是否有任何权限来突出显示正在发生的事件。查看此链接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();
  

【讨论】:

我已经有一个用于发送和管理通知的 AlarmService 类。它在 AlarmReceiver 类中调用。 已经坚持了一段时间了。有什么帮助吗? 嗨@S.A.Nik 我遇到了同样的问题你找到解决办法了吗?

以上是关于关闭应用后服务不启动警报的主要内容,如果未能解决你的问题,请参考以下文章

用户按下后退按钮后检查互联网连接。(Android的警报框)

打开和关闭警报 ios

警报视图没有确定/关闭按钮?

通过定位服务警报开启定位后等待定位开启

如何关闭Windows XP系统中多余的服务

Android 警报管理器在重新启动设备或从后台杀死应用程序后取消