Skip to content Skip to sidebar Skip to footer

Alarmmanager And Wakelock

I want to use an alarm manager in my activity. I set up an alarm at the onPause method of main activity like this, Intent intent= new Intent(namaz_vakti_activity.this, namaz_vakti_

Solution 1:

Now the below code works perfectly.

  • alarmmanager works well. However, it does not on the screen, so I have to use wakelock
  • alarmmanager wakes the device (you are absolutly right, huang), but the activity can not get focus. So I have to define a new line (Android 2.0 or above supports these flags: getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

The summarized code is below.

publicvoidonCreate(Bundle savedInstanceState)

...

    getWindow().addFlags(
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
        WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

...


protectedvoidonResume()

    ...

//pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);//wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,"namaz_vakti_activity");//wl.acquire();

MPX=MediaPlayer.create(this, R.raw.azan1);

...

if (eltime==0 && uyandirma && !MPX.isPlaying())
{
    MPX.setVolume(1,1);
    MPX.start();
}


protectedvoidonPause()

    ...

    Intent intent= new Intent(namaz_vakti_activity.this, namaz_vakti_activity.class);
    PendingIntent sender = PendingIntent.getActivity(this, 1234567, intent,Intent.FLAG_ACTIVITY_NEW_TASK);

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    eltime=Calendar.getInstance().getTime().getHours()*60+Calendar.getInstance().getTime().getMinutes();
    eltime=(long)(Sun_Rise*60)-eltime;
    if (eltime<0)
        eltime=eltime+24*60;
    eltime=eltime-pre_time;
    if (eltime<=0)
        eltime=eltime+24*60;
    if (uyandirma)
    {
        am.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+eltime*60000, sender);
        Toast.makeText(this,"Uyandirma saati "+ConvertTime(Sun_Rise-pre_time/60.0),Toast.LENGTH_SHORT).show();
    }
    else
    {
        am.cancel(sender);
    }

    if (MPX.isPlaying())
    {
        MPX.pause();
        MPX.release();
    }

    //if (wl.isHeld()) wl.release();

Solution 2:

You use

am.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+eltime*60000, sender); 

to set an alarm, and within it you use AlarmManager.RTC_WAKEUP, so I believe the activity you intent to start will be launched even when the device is asleep. Perhaps you don't need a wakelock.

When you use wakelock, you need this permission: android.permission.WAKE_LOCK. Is this the problem in you codes?

Solution 3:

I was facing the same problem and the most interesting thing was that it was working on Samsung Galaxy S duos but not Galaxy Nexus. My solution was to create a static lock in Broadcast reciever onReciever() method.

privatestaticPowerManager.WakeLock wakeLock;

publicstaticvoidacquireWakeLock(Context ctx) {
    if (wakeLock != null)
        wakeLock.release();

    PowerManager pm = (PowerManager) ctx
            .getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.ON_AFTER_RELEASE,
            "aqs_wake_lock");
    wakeLock.acquire();
}

publicstaticvoidreleaseWakeLock() {
    if (wakeLock != null)
        wakeLock.release();
    wakeLock = null;
}

call acquireWakeLock() before calling startActivity() and then in OnCreate() method of launched activity I was playing the alarm sound after some delay i.e. in onPause() and on stopping alarm sound, I am finishing the activity and releasing the wakeLock by calling releaseWakeLock().

new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            playSound(getApplicationContext(), getAlarmUri());
        }
    }, 1000);

Hope it will help for someone.

Post a Comment for "Alarmmanager And Wakelock"