Articles of wakelock

在Android上关闭屏幕

我试图在某个动作发生后打开和关闭显示器(让我们担心暂时关闭屏幕)。 根据我对唤醒锁的理解,这就是我所拥有的: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “My Tag”); 当我在stackoverflow上阅读其他post时,他们似乎告诉我PARTIAL_WAKE_LOCK将关闭屏幕。 但是,如果我阅读SDK,它会说它只允许屏幕关闭。 所以我认为这是不对的。 任何提示都会有所帮助! 谢谢, 麦克风

正确的模式,以获取BroadcastReceiver中的WakeLock并在服务中释放它

即使经过大量的研究,我仍然不能完全确定我如何实现一个由BroadcastReceiver启动的Service的WakeLock是正确的 – 即使它似乎工作正常。 广播接收器从警报发送到它的意图,所以从AlarmManager的API文档AlarmManager : 如果您的警报接收器调用了Context.startService(),则手机可能会在启动所请求的服务之前hibernate。 为防止这种情况发生,您的BroadcastReceiver和服务需要实施单独的唤醒锁定策略,以确保电话继续运行,直到服务可用。 所以,在onReceive()我这样做: Intent serviceIntent = new Intent(context, SomeService.class); context.startService(serviceIntent); if(SomeService.wakeLock == null) { PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); SomeService.wakeLock = powerManager.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, SomeService.WAKE_LOCK_TAG); } if(! SomeService.wakeLock.isHeld()) { SomeService.wakeLock.acquire(); } 在我做的服务中: try { // Do some work } finally { if(wakeLock != null) { if(wakeLock.isHeld()) { wakeLock.release(); } wakeLock = null; […]

即使我正在发布它,WakeLock仍然保持错误

我有一个应该在后台运行的服务。 它在我的应用程序打开时启动,并在用户关闭我的应用程序时结束。 每当我的应用程序在后台或屏幕关闭时,我仍然需要运行该服务。 我用WakeLock实现了这一点,但由于某种原因我在标题中得到了错误。 这是令人担忧的,因为我可能是内存泄漏WakeLock(如果我理解正确)。 我可以通过重新启动我的应用程序来触发错误。 这是相关的代码: public class SomeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “TAG”); if (!mWakeLock.isHeld()) mWakeLock.acquire(); //Handle other processing return START_STICKY; } @Override public void onDestroy() { if (mWakeLock.isHeld()) mWakeLock.release(); super.onDestroy(); } } […]

WakeLock在仍然举行时最终确定

pm和keepScreenOnvariables是全局定义的。 我在OnCreate方法中获取了PowerManager.WakeLock: pm = (PowerManager) getSystemService(Context.POWER_SERVICE); keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,”tpd”); 在我的onStart,onResume和onRestart中我抓住了锁 if (keepScreenOn == null) { keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,”tpd”); } keepScreenOn.acquire(); 在我的onDestroy,onPause和onStop中,我发布了锁定: if (keepScreenOn != null) { keepScreenOn.release(); keepScreenOn = null } 我的应用程序退出后,我得到一个失败的屏幕,adb抱怨 java.lang.Exception:WakeLock在仍然持有时完成:tpd 跟踪显示我在退出前释放了锁。 我错过了什么? 如果没有穿越onPause , onStop或onDestroy至少一个,就无法离开应用程序。 我可以看到应用程序调用release() ,因为它调用了acquire(),所以即使唤醒锁被引用计数,它仍然应该没有引用。

我怎样才能看到哪些唤醒锁是活跃的

出于某种原因,我的Android手机不会进入睡眠状态。 我认为唤醒锁是让它保持清醒,但没有办法分辨哪些唤醒锁是活跃的。 正在运行的服务没有列出任何可疑的东西,当然也没有什么不同。 所以我的问题是: 当进程结束时,Android肯定会发布唤醒锁吗? 有可能一个应用程序写得不好,并且在退出之前没有发布唤醒锁吗? 有没有办法看到活跃的唤醒锁? 这就是dumpsys power显示: $ dumpsys power Power Manager State: mIsPowered=true mPowerState=0 mScreenOffTime=226093 ms mPartialCount=0 mWakeLockState= mUserState= mPowerState= mLocks.gather= mNextTimeout=91922738 now=92136117 -213s from now mDimScreen=true mStayOnConditions=0 mScreenOffReason=3 mUserState=0 mBroadcastQueue={-1,-1,-1} mBroadcastWhy={0,0,0} mPokey=1 mPokeAwakeonSet=false mKeyboardVisible=false mUserActivityAllowed=false mKeylightDelay=6000 mDimDelay=47000 mScreenOffDelay=7000 mPreventScreenOn=false mScreenBrightnessOverride=-1 mButtonBrightnessOverride=-1 mScreenOffTimeoutSetting=60000 mMaximumScreenOffTimeout=2147483647 mLastScreenOnTime=0 mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=false) mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 […]

Android – 在不触发睡眠/锁定屏幕的情况下关闭显示屏 – 使用触摸屏打开

我一直试图find一种关闭显示器的方法,并从用户触摸触摸屏唤醒。 该设备处于嵌入式环境中,其中设备是平板电脑,并且用户除了触摸屏之外不能访问任何东西(根本没有按钮)。 它连接到电源,所以电池不会有问题,但是当我检测到没有活动时我想要关闭屏幕,这样它就不会整天盯着它们,也不会缩短LCD背光的寿命。 我永久保持一个唤醒锁,并决定何时自己睡觉。 问题是,当我使用以下方式关闭屏幕时: WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 0; getWindow().setAttributes(params); 活动暂停并停止。 并且该单元不会响应触摸来唤醒它。 您需要按电源按钮。 此时,“滑动解锁”显示出来。 我想关闭显示器,然后继续运行,这样我就可以检测到触摸屏事件并重新打开显示屏。 我也尝试将显示器调到0.1的亮度,这适用于某些设备,但我需要它的设备才能工作,只是“调暗”显示器。 我也试过这个: // First Remove my FULL wakelock //then aquire a partial wake lock (which should turn off the display) PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “Your Tag”); wl.acquire(); 但是此方法不会关闭显示屏。

初学者问题:Wakelocks

我是WakeLock的新概念,需要你的帮助。 问题: 我认为WakeLock是某种types的锁,当执行代码持有时会阻止设备进入hibernate状态。 如果设备已经处于睡眠/待机模式,那么代码将会执行呢? 假设它永远不会获得一个WakeLock? 当一个长时间运行的任务(abt 7-8秒)在后台线程(AsyncTask)中完成时,我应该为打一个WakeLock而烦恼吗? AsyncTask已经为我获得了吗? 链接官方文件和wakelocks书面表示赞赏。 谢谢。

唤醒lockingandroid服务重复

我有这个应用程序需要运行一个服务(背景),周期性地发出嘟嘟声。 手机需要每隔一分钟哔一声,持续5秒钟(在服务中使用一个处理程序)。 我已经实现了这个完美的服务,但是当手机进入深度睡眠模式时,这个处理程序的执行停止。 在这个问题中使用这个答案,我设法使用唤醒锁,它工作正常。 但是,当我明确地把手机置于深度睡眠模式时,处理程序停止执行。 我在哪里放置唤醒服务。 下面的代码片段。 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() { […]

“PowerManger.FULL_WAKE_LOCK已弃用”是什么意思?

我有这个代码: wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 而FULL_WAKE_LOCK已被删除,并且显示“PowerManger.FULL_WAKE_LOCK已弃用”。 代码正在工作。 但究竟是什么意思? 它可以唤起任何问题吗?

使用WakeLock保持stream播放

我有一个MediaPlayer运行在一个正在从URL(stream媒体)播放audio的服务中。 到目前为止,它似乎运行良好,甚至在手机待机时继续播放。 我目前没有获得一个唤醒锁。 我的问题是: 在我的情况下,实际上有必要获得一个唤醒锁吗? 如果有必要,我应该得到什么样的唤醒锁? 是的,这是wakelock的合法用例,因为我的用户明确地希望audio继续播放。