Search code examples
androidandroid-intentservicealarmmanagerandroid-pendingintent

Pending intent get service


I am having a problem getting my pendingIntent to fire. I have done some troubleshooting using the logcat etc. and in the end I am almost positive that my problem is actually in my pendingIntent method. The times I have set are correct, and the method is getting called, but nothing happens at the scheduled times. Here is the method that I use to create the pendingIntent

public void scheduleAlarm(){
    Log.d("Alarm scheduler","Alarm is being scheduled");
    Intent changeVol = new Intent();
    changeVol.setClass(this, VolumeService.class);
    PendingIntent sender = PendingIntent.getService(this, 0, changeVol, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, time, sender);
    //Toast.makeText(this, "Volume Adjusted!", Toast.LENGTH_LONG).show();
}

Here is the service class:

public class VolumeService extends Service{

@Override
public void onCreate() {
    super.onCreate();
    Log.d("Service", "Service has been called.");
    Toast.makeText(getApplicationContext(), "Service Called!", Toast.LENGTH_LONG).show();
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

}

The log in the scheduleAlarm() class is working as I planned but then nothing happens, so I assume it is my pendingIntent. Thanks in advance!


Solution

  • Figured it out! The problem was in the Service class, I changed a few other things around too. However, I believe the main problem was that in my service class in the onCreate method I was trying to run my code. But this needed to be done in the onStartCommand method

    public class VolumeService extends Service{
    
    @Override
    public void onCreate() {
        super.onCreate();
    
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(getApplicationContext(), "Service started", Toast.LENGTH_LONG).show();
        return START_NOT_STICKY;
     }
    
    
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    
    }
    

    and a few changes were made in the class starting the service as seen here:

        public void scheduleAlarm(){
        Log.d("Alarm scheduler","Alarm is being scheduled");
        Intent intent = new Intent(AlarmSettings.this, VolumeService.class);
        PendingIntent pintent = PendingIntent.getService(AlarmSettings.this, 0, intent, 0);
        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.set(AlarmManager.RTC_WAKEUP, time, pintent);
    }