android两个service互相唤醒,唤醒锁定android服务重复出现

该博客讨论了如何在Android应用程序中实现一个后台服务,每隔一分钟发出蜂鸣声,并在手机进入深度睡眠模式时保持服务运行。作者通过使用唤醒锁(PowerManager.WakeLock)成功解决了处理程序在深度睡眠状态下停止执行的问题,但发现当手动将手机置于深度睡眠模式时,服务仍然暂停。博客内容包括了服务的创建、唤醒锁的获取和释放以及屏幕状态的检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有这个应用程序需要运行定期发出蜂鸣声的服务(背景).

手机需要每隔一分钟发出一声哔哔声,持续5秒钟(在服务中使用了一个处理程序).我已经实现了这项完美的服务,但是当手机进入深度睡眠模式时,此处理程序的执行停止会停止.使用SO中的问题的this答案,我设法使用唤醒锁,它工作正常.但是当我明确地将手机置于深度睡眠模式时,处理程序停止执行.我在哪里将唤醒锁放在服务中.下面的代码片段.

public class PlaySound extends Service{

PowerManager.WakeLock wl ;

PowerManager pm;

private SoundManager mSoundManager;

boolean wakeUpFlag = false;

@Override

public void onCreate(){

super.onCreate();

mSoundManager = new SoundManager();

mSoundManager.initSounds(getBaseContext());

mSoundManager.addSound(1, R.raw.sound);

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

startservice();

return START_STICKY;

}

private void startservice() {

System.out.println("Started the service");

timer.scheduleAtFixedRate( new TimerTask() {

public void run() {

toastHandler.sendEmptyMessage(0);

}

}, 0, 60000);

}

private final Handler toastHandler = new Handler()

{

@Override

public void handleMessage(Message msg)

{

result =start();

System.out.println("result"+result);

close();

}

};

protected void close() {

try {

if(wakeUpFlag){

wl.release();

System.out.println("Released the wakelock");

}

if(!pm.isScreenOn()){

System.out.println("Screen is off - back to sleep");

pm.goToSleep(1000);

}

else{

System.out.println("Screen is on - no need to sleep");

}

bs.close();

writer.close();

System.out.println("Closed socket and writer");

System.out.println("Size of file:"+f.length()/1024);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

public void start(){

try{

wakeUpFlag = false;

pm = (PowerManager)getSystemService(Context.POWER_SERVICE);

if(!pm.isScreenOn()) {

wakeUpFlag = true;

wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"CollectData");

System.out.println("Screen off - wake lock acquired");

wl.acquire();

}

else{

System.out.println("Screen on - no need of wake lock");

}

}

catch(Exception e){

e.printStackTrace();

}

mSoundManager.playSound(1);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值