Articles of android wake lock

Android – 我怎样才能从困难的睡眠中唤醒手机拍照?

我想要在几小时内定期从Android设备的相机拍摄照片,以创build延时video效果。 我设置了一个AlarmManager.RTC_WAKEUP标志设置为每几分钟启动一个服务的报警pipe理器。 该服务持有一个部分唤醒锁,做一些工作,然后通过启动活动的闹钟pipe理器调用广播接收器。 活动创build(或恢复),打开自己的唤醒锁,并设置相机预览表面。 一旦表面被设置,SurfaceHolder监听器的surfaceChanged()方法被调用,最终拍摄一张照片。 如果设备清醒,一切都如预期的完美。 但是,如果设备处于睡眠状态,一旦Activity的onResume()方法结束,活动立即暂停。 相机的预览表面永远不会完成初始化,也不会拍摄任何照片。 所以我的问题是: 有没有办法以编程方式唤醒电话? 我甚至尝试使用: PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false); 但是,如果它睡着了,它不会唤醒电话。 有没有办法拍照而不使用预览表面视图? 有没有办法拍摄不依赖于asynchronouscallback的图片? 我可以把所有的活动onResume()方法的代码拍照吗? 有没有办法让Activity的onResume()方法运行足够长时间,以便相机的预览有足够的时间来初始化和调用所有的监听器? 我正确使用wakelocks,并且我已经在清单文件中正确设置了所有权限。 我的活动不保持足够长的时间,以使asynchronous侦听器正常工作。 而为了解决这个问题,我正在努力保持Android 1.6兼容的一切,因为这是我唯一可以访问的testing设备。 这是令人沮丧的东西!

Android:唤醒和解锁手机

我想弄清楚如何使用服务唤醒和解锁手机。 我一直在指这个post,但是,我不明白为什么它不工作。 这是我到目前为止的代码: public class WakephoneActivity extends Activity { BroadcastReceiver mReceiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Log.v(TAG, "Screen OFF onReceive()"); screenOFFHandler.sendEmptyMessageDelayed(0, 2000); } }; } private Handler screenOFFHandler = new Handler() { @Override public void handleMessage(Message msg) { […]

Android Espresso,testing前唤醒设备。 如何使用自定义清单进行testing?

我一直在用androids新的espresso框架编写testing,发现它运行良好。 一件令人讨厌的事情(特别是浓咖啡)是我必须确保我的屏幕清醒和解锁的testing运行。 我发现一个解决方法(通过各种来源),但我不知道最好的方式来整合它。 所以这就是我所做的,在我的“家庭”活动中,我有以下代码: Home.class: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /************ Put this in a conditional for a test version ***********/ KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock keyguardLock = km.newKeyguardLock("TAG"); keyguardLock.disableKeyguard(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } 还需要添加以下权限: <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> 所以在做完这些之后,现在我的testing就会唤醒我的手机,所以我不必保持警惕,确保在testing开始之前屏幕没有closures。 我宁愿不包括这些权限,但显然在我的应用程序。 我知道gradle有可能做出不同的“口味”,有自己的Android清单,将合并到主清单。 我正在考虑使用,但我宁愿不添加一个风味,只是因为这个原因,因为这已经使用testing构buildtypes来运行。 它看起来像从Android Gradle的文档,你不能创build一个AndroidManifest的instrumentTest目录,因为它会自动生成。 然而,我想知道是否有另一种方法来做到这一点,而不创build一个变体,然后指定testing应该运行该变种。 此外,我不确定所有这些的确切语法,并认为只是在网站上为其他人提供这些信息似乎很好。 最后,如果有人知道更好的方法来解决这个问题,那么我很乐意听到这个问题,因为我不是这种方式的忠实粉丝。

打开接收器/服务的屏幕

我希望我的应用程序能够打开屏幕并显示我的应用程序。 假设我正在设置闹钟,并且每隔一小时我希望我的应用在设备自然睡眠之前显示2分钟。 我发现WakeLock(FULL_LOCK)和KeyguardManager不推荐使用。 我创build了一个WakefulBroadcastReceiver和服务,这些工作。 @Override protected void onHandleIntent(Intent intent) { // I need to show the screen here! for (int i=0; i<5; i++) { Log.i("SimpleWakefulReceiver", "Running service " + (i + 1) + "/5 @ " + SystemClock.elapsedRealtime()); try { Thread.sleep(5000); } catch (InterruptedException e) { } } Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); […]

在Android上closures屏幕

我正试图在某个动作发生后打开和closures显示器(让我们只是担心现在closures屏幕)。 从我从wake lock所了解到的,这就是我所拥有的: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 当我读到其他post在stackoverflow和其他地方,他们似乎告诉我,PARTIAL_WAKE_LOCK将closures屏幕。 但是,如果我阅读SDK说,它只会允许屏幕closures。 所以我认为这是不对的。 任何提示将有所帮助! 谢谢, 麦克风

如何使android设备始终处于唤醒模式?

设备成功后, 现在,我需要使设备始终处于唤醒状态,即始终可见的用户界面,没有黑屏或任何白日梦屏幕。 要做到这一点,我认为我必须完成以下任务: 没有locking屏幕 – closures 睡眠设置为“从不” 白日梦设置为“closures” 我发现的全是应用层,也就是说有一些应用可以完成上面的任务。 但是,由于我的手机是根植的,我想用系统文件来实现,即使其他一些应用程序试图改变上面的function,他们也不应该这样做。

三星“应用程序优化”function可在3天后杀死后台应用程序

我们目前正在开发一个Android应用程序,这是一个健身追踪器应用程序。 它在后台不断运行,在大多数设备上都能正常运行,但是我们一直在使用某些三星设备完全停止运行。 经过一番调查,似乎一些三星设备有一个完全自定义的“应用程序优化”function( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ),其中基本上是一个(非常)原始版本的瞌睡function,存在于后来的Android版本,基本上只是谋杀应用程序,如果他们没有使用三天。 由于这个应用程序或多或less只是在进行日志logging,并没有打开这个活动,这对我们来说是一个很大的问题,因为这个function已经在很多三星设备上预先启用了。 这个问题是通过使用前台服务解决的,但这是一个解决scheme的大锤,需要用户持续的通知来干扰用户,而且我们确实不需要应用程序在前台 – 我们正常的电源Android的pipe理。 三星应用程序优化function明确指出,如果三天内未使用应用程序,它将“优化”应用程序。 有没有人有三星认为是“使用”的见解,我可以以某种方式触发? 副作用:在我看来,这是一个糟糕的实现function,使得Android上的开发更具敌意。 除了我们的用例之外,任何Messenger应用程序都会中断。 如果不是因为Facebook Messenger和Whatsapp硬连接到应用程序免费的事实,用户会发疯,因为它会打破他们的经验。

Android蓝牙和WakeLock关系

我正在研究在后台运行的Android应用程序,并支持蓝牙配件。 我想不断地在后台监听蓝牙设备,尝试打开一个电话sockets。 我的问题是,是否有可能实现这一点,而不是不断保持一个部分唤醒锁,因为这显然会有严重的电池后果。 所以我想知道的是蓝牙在手机上睡着了什么效果。 有一个开放的蓝牙sockets,手机保持清醒状态吗? 如果设备尝试连接,蓝牙芯片是否会自动唤醒Android? 我试图做一些testing来回答这些问题,但是很难将发生的事情与唤醒locking在一起; 此外,我不知道我是否可以依靠我观察到的行为,或者如果它在其他设备上发生变化。

即使我释放它,WakeLock仍然保持错误状态

我有一个应该在后台运行的服务。 它在我的应用程序打开时启动,并在用户closures应用程序时结束。 每当我的应用程序在后台或屏幕closures,我仍然需要服务运行。 我用WakeLock实现了这个function,但由于某种原因,我在标题中遇到了错误。 这是有关的,因为我可能是内存泄漏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(); } } […]