Alarmmanager And Wakelock
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"