以 10 秒为间隔获取部分唤醒锁定的应用程序是否有任何问题。我的用例是能够通过设备加速度计持续监控用户的运动。基本上,我有一个每 10 秒由一次警报调用的服务。
该服务获取唤醒锁,从加速度计获取一些读数以确定当前的运动状态,然后释放唤醒锁。服务的总生命周期约为 4 秒。
我的理解是,这会导致设备每分钟保持唤醒约 24 秒。虽然不理想,但我希望这仍然是比在我的应用程序的整个生命周期中保持恒定唤醒锁更好的做法。
另一方面,在如此短的时间内获取和释放唤醒锁的行为是否可能对电池寿命同样不利?
任何输入表示赞赏。
我有问题,经过一些搜索,我没有找到任何积极的解决方案.经过研究,我认为我的问题没有实施,但这个问题可能是我的最后一次机会.
我需要得到什么?
有应用程序获取有关移动网络强度信号的信息.我是这样做的
PhoneStateListener.当然它工作得很好但是当我的设备进入睡眠模式时,监听器不起作用:
https://code.google.com/p/android/issues/detail?id=10931 https://code.google.com/p/android/issues/detail?id=7592
WakeLock仅在设备因超时关闭的情况下解决问题.如果我按下硬电源按钮,我的设备也会进入睡眠模式.我们无法覆盖电源按钮操作.
我的目标是在启用设备时始终获得强度信号.什么模式无关紧要.它应该一直收集数据.
题:
有什么想法吗?怎么实现呢?有没有办法做到这一点,或者可能有一些黑客?欢迎所有解决方案.如果您有一些有用的经验,请分享一下.
感谢大家的帮助!!! 我希望,这个主题将获得有关此问题的完整信息.
android sleep signal-strength android-wake-lock phone-state-listener
我的音频流应用程序仅通过WifiLock可以正常工作。
但是一些设备报告说,当它们关闭屏幕时,连接被切断,音频流达到最高。(他们说3G不会发生这种情况)
因此,我想也许我也可以使用Partial WakeLock。我不确定这是否可以解决问题,但我认为这是一个选择。同时,在基本的WifiLock工作时添加WakeLock可能会更快耗尽电池,并且可能无法解决问题。
您如何为此类问题和应用添加WakeLock呢?
private static WifiLock wifiLock = ((WifiManager) appInstance().getSystemService(Context.WIFI_SERVICE))
.createWifiLock((android.os.Build.VERSION.SDK_INT>=12?WifiManager.WIFI_MODE_FULL_HIGH_PERF:WifiManager.WIFI_MODE_FULL), "myappwifilock");
Run Code Online (Sandbox Code Playgroud)
新添加的行:
private static WakeLock wakeLock= ((PowerManager) appInstance().getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myappwakelock");
Run Code Online (Sandbox Code Playgroud)
(当然,我在创建服务和销毁服务时获得并释放了这些锁。)
我发现两年前的帖子说有人无法做到。我还发现可以使用ACTION_USER_PRESENT来检测用户何时解锁屏幕,但是可以检测到用户何时打开屏幕(通过任何操作)?
编辑:我想知道用户何时按下任何按钮或执行其他可以打开屏幕的操作
我正在为 Android 设备编写 HTTP 服务器,通过 NanoHTTPD 实现。
我的一个目标是让设备即使在屏幕关闭的情况下也允许传入连接。
我开始时很小,有一个持久的通知,认为这将使我的应用程序保持在内存中并在后台运行。锁定设备后,我可以继续浏览它所提供的网页,只要我不让它待一分钟。一旦我这样做,它就完全停止响应。
我通过包含 CPU 部分唤醒锁来升级我的尝试,这没有任何区别。然后我添加了一个完整的 WifiLock 来保持收音机打开,最后,在绝望中,一个 MulticastLock(我想也许它可以让收音机监听连接)。尽管如此,在大约一分钟没有建立任何连接后,设备停止响应,即使有所有这些锁定。
我可以做些什么来保持设备监听传入连接?似乎通过定期请求击中设备使其保持清醒......我可以以某种方式以编程方式模拟这种行为吗?我想不出办法。
谢谢!
编辑:出于这个问题的目的,可以忽略电池消耗。
编辑:NanoHTTPD 也作为服务运行。
所以我刚刚将谷歌分析添加到我的应用程序的活动中.将新的.apk上传到Play商店时,它告诉我该应用现在还需要1个权限:WAKE_LOCK.
现在我100%确定此权限不在我的清单中,因此必须由Google Analytics添加.有没有办法禁用它?或者这会破坏谷歌分析?
提前致谢!
标题可能很神秘。我的问题很简单,我创建了唤醒锁:
pwrMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakelock1")
Run Code Online (Sandbox Code Playgroud)
然后我在另一个地方用相同的标签再次执行此操作,我是否获得相同的获取引用唤醒锁?
嗨我正在使用报警管理器3分钟的特定时间间隔,我开始监控.它有时工作,突然我注意到有不规则的时间间隔,这是不正确的!你可以在附件日志中看到"20-Jul-2016 12:22:03 pm"时间变化!我连接了手机并关闭了屏幕并进行了监控!每3分钟,我点击服务器并获得响应为1.但是,有一次,它需要5分钟才能到达服务器!这个奇怪的问题为何发生?
这是代码.
public void startAt3() {
Intent alarmIntent = new Intent(ActivityTracking.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(ActivityTracking.this, 0, alarmIntent, 0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
/* Set the alarm */
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
/* Repeating on every 3 minute interval */
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
180000L, pendingIntent);
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Log.e("alarm",mydate);
}
Run Code Online (Sandbox Code Playgroud)
AlarmReceiver:
public class AlarmReceiver extends WakefulBroadcastReceiver {//AlarmReceiver class
@Override
public void onReceive(Context context, Intent intent) {//onReceive method
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Log.e("alarm",mydate);
Intent service = …Run Code Online (Sandbox Code Playgroud) android broadcastreceiver alarmmanager android-wake-lock android-broadcastreceiver
我正在使用 SIP 协议开发 IP 语音 (VoIP) 应用程序,该协议要求应用程序监听来电。这意味着应用程序不得休眠或死亡。
对于旧代码,似乎这样做的方法是获取PARTIAL_WAKE_LOCK。
现在从 Android 6.0 及更高版本开始,有新的Doze。建议,如果您不希望您的应用进入待机状态,您应该通过请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限将其“列入白名单” 。根据文档,这是专门针对 VoIP 应用程序的。
这两个不同的东西似乎是相关的。我不确定它们是如何相关的,它们是否相互干扰,我是否应该使用一个或另一个或两者,以及是否还有其他考虑。请解释。
另外,我不允许在这个项目上使用推送通知。如果您有其他节省电池的建议,请告诉我。
我试图使用 WorkManager 每 10 秒运行一个简单的工作。当应用程序在后台或前台运行时,它可以完美运行。当我关闭应用程序(杀死应用程序)时,该工作将不再被调用。
我在创建 MainActivity 时调用以下代码
fun scheduleNotification(context: Context) {
val workRequest = OneTimeWorkRequest.Builder(NotificationWorker::class.java).setInitialDelay(10000, TimeUnit.MILLISECONDS)
WorkManager.getInstance().enqueueUniqueWork("NotificationWorker", ExistingWorkPolicy.REPLACE, workRequest.build())
Log.d("NotificationWorker", "start")
}
Run Code Online (Sandbox Code Playgroud)
工人阶级
class NotificationWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
Log.d("NotificationWorker", "Working")
NotificationUtil.scheduleNotification(applicationContext) // n times
return Result.success()
}
}
Run Code Online (Sandbox Code Playgroud)
当我的应用程序未关闭时,这些代码运行良好。
即使应用程序关闭,我怎样才能让它运行?
android ×9
alarmmanager ×1
android-doze ×1
android-wifi ×1
coding-style ×1
nanohttpd ×1
permissions ×1
portsip ×1
sip ×1
sleep ×1
wakelock ×1