Articles of android wake lock

在Android 5.1中每秒调度一次闹钟

我想在我的应用程序中每秒运行一次报警服务。它在5.1版本以下工作正常。 但在5.1设备中不会触发。 我正在使用commonsware清醒的意图服务。logcat消息是说“ 可疑短间隔1000毫秒;扩展到60秒 ”。 我怎样才能轮询5.1的每一秒? 有人可以build议我怎么做到这一点? 更多的解释: 我的用例是我需要每隔30分钟进行一次操作。 AFAIK对于这个使用报警pipe理器是有效的方式,但在这里 1)我需要向用户显示倒数计时器。 (定时器任务,倒数计时器,ScheduledExecutorService对此非常有用) 2)即使应用程序在后台,我也需要每隔30分钟(通过通知)通知用户(警报服务就足够了) 但在这里,我的问题是当应用程序在后台,当你从最近刷出应用程序(即应用程序进程被终止)没有任何服务或定时器,处理程序,执行器服务将无法正常工作。 在这种情况下,如何在完成30分钟后通知用户。 如果我以错误的方式思考,请引导我。 谢谢, 切塔尼亚

WiFi锁不起作用,如何防止wifi功率节省?

我做了一个应用程序,将手机变成networking摄像头,并使用手机连接将图像发送到互联网networking空间。 我正在使用广告活动,每5或15分钟设置一个“闹钟pipe理器”执行一项服务。 要执行服务的整个执行,我会执行一次唤醒locking,但是当服务完成时会中断。 所有这一切都与移动连接完美的工作,但不与wifi一样。 我已经在无线networking睡眠设置在WiFi选项策略“从不”。 但经过一段时间(并不总是相同的)手机似乎进入省电模式:WiFi图标尚未在状态栏,但手机无法连接。 即使是我使用浏览器…所以我必须断开连接并手动重新连接。 logcat中的消息: notify conn break (IOEx), close connection即使手机插上电源!!! 为什么? (1) 做一个由启动服务的活动组成的另一个应用程序,它总是以一个唤醒锁来运行。 所以我已经添加了wifilocking以确保连接,而且这种方法有时运行,而其他一些不是。 总是一样的notify conn break (IOEx), close connection为什么? (2) 最后一个实验是从第一个应用程序(报警pipe理器)派生出来的,并确保wifi没有进入睡眠/省电模式(一个??)我已经在执行代码后以飞行模式打开电话并在循环开始时closures(连接)。 这项工作可以两天,但有时只是在工作后(每个小时或两个,而不是每个5分钟,或有时不工作一整天,然后重新启动没有任何理由..)。 那么,为什么飞机模式有时不会重新build立起无线连接呢? (还有一些时候呢?)(3) 这款手机是原装2.2版的三星Galaxy ACE,并一直插上充电。

AlarmManager启动服务时的唤醒locking

Android的AlarmManager Javadoc状态 When an alarm goes off, the Intent that had been registered for it is broadcast by the system, 在Android提供的API演示中有一个AlarmService (package com.example.android.apis.app),它演示了AlarmService的使用。 其中我们有以下内容(为清晰起见编辑): PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this, 0, new Intent(AlarmService.this, AlarmService_Service.class), 0); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender); 所以在这个例子中,它不会执行PendingIntent mAlarmSender = PendingIntent.getBroadcast(…); 相反,它做了一个Javadoc永远不会提及的getService 。 我询问这个​​问题的原因是由于CPU唤醒锁的影响。 Javadoc说,一旦广播接收器的onReceive()返回,AlarmManger的唤醒锁就会被释放。 我想知道的是,如果你使用像例子中的闹钟,唤醒锁的含义是什么? Javadoc似乎没有解决这个问题。 如果有任何事情,似乎意味着您在设置闹钟时必须使用广播技术。

Android:前台服务与wakeLock

我对Android相对来说比较陌生,所以我所要求的可能看起来很明显(虽然我已经阅读了所有类似题目的问题,并已经进行了大量的search)。 我需要长时间连续监测加速度计。 已经提出了两种方法: 1)获取在加速度传感器被监视的整个时间保持的部分唤醒锁; 和 2)监视前台服务中的加速度计。 第一种方法似乎使用了大量的电池寿命。 第二种方法应该导致只有很less人遇害的服务,但是我不确定“很less”意味着什么。 应该采用哪种方法,我应该考虑哪些方法?

如何在没有SyncAdapter的情况下在Android上实现帐户?

我正在为使用内置帐户系统(使用AccountManager API)的Android应用程序实现login系统。 在Android 2.2+上一切都很好,但在Android 2.1上,不包括SyncAdapter会导致在帐户设置屏幕上重新启动(请参阅http://code.google.com/p/android/issues/detail?id=5009和AccountManager没有SyncAdapter? ) 为了解决这个问题,我实现了一个存根SyncAdapter,它只是从IBinder onBind(Intent intent)返回null ,并将相关的东西添加到清单。 这解决了Android 2.1的重启问题。 然而,它引入了一个进一步的问题:添加帐户后,Android系统稍后会启动帐户同步。 尽pipe没有发生错误(事实上,我的SyncAdapter什么都不做,除非通过返回null ,否则无法导致错误),同步图标保持停留在顶部的通知栏中。 这会导致Android同步系统保持永久性唤醒locking ,防止设备进入hibernate状态。 帐户不会在帐户设置屏幕(在“数据和同步”标题下)中列出任何可同步的组件,并且始终在帐户列表中显示同步状态的“同步处于closures状态”(即使同步图标在通知栏)。 禁用帐户同步不会消除该问题。 删除帐户可以停止问题。 我的猜测是我不应该返回null。 我应该返回一个ThreadedSyncAdapter的基本实现吗? 获得一个帐户系统没有相关的同步在2.1和2.2 +正常工作的任何帮助非常感谢。

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蓝牙和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(); } } […]

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应该运行该变种。 此外,我不确定所有这些的确切语法,并认为只是在网站上为其他人提供这些信息似乎很好。 最后,如果有人知道更好的方法来解决这个问题,那么我很乐意听到这个问题,因为我不是这种方式的忠实粉丝。