- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一项执行后台更新的服务。
我想为用户提供在电池百分比达到特定水平时禁用更新的选项。
根据我的研究,我将在我的服务类的 onCreate
方法中使用接收器,例如:
public class MainService extends Service
{
@Override
public void onCreate()
{
this.registerReceiver(this.BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver BatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
int level = intent.getIntExtra("level", 0);
}
};
}
我假设最佳做法是让服务保持运行状态,检查服务中的电池电量,而不是根据百分比执行 CPU 密集型代码?
我实际上不需要根据电池百分比停止服务本身并重新启动它?
更新:
这似乎是一个更好的解决方案,但不是 100% 确定。我在 AndroidManifest
中注册了一个 BroadcastReceiver
:
<receiver android:name="BatteryReceiver" />
然后创建了一个BroadcastReceiver:
public class BatteryReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context, final Intent intent)
{
final int currentBatteryPercent = intent.getIntExtra("level", 0);
final int disableBatteryPercent = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context).getString("batteryPercent", 0);
//AlarmReceiver is the service that performs the background updates
final ComponentName component = new ComponentName(context, AlarmReceiver.class);
if (currentBatteryPercent < disableBatteryPercent)
{
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
}
else
{
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);
}
}
}
最佳答案
没错。您通常要做的是为更新安排一些广播 Intent (可能通过 AlarmManager)。当您收到电池电量低的通知时,您会将其存放在您的服务中,然后在进行更新之前,检查以确保电池电量不会太低。 here是观看电池电量的好教程。在处理此 Intent 时,您不应该做太多事情,只需将电池电量保持在某个位置并(在进行更新之前)确保它适本地“充满”。
您的更新是停止应用程序的一种非常糟糕的方式。通常,要求包管理器停止您的组件与其说是一种解决方案,不如说是一种黑客攻击。相反,您应该将一些代码移动到实际执行更新的组件中,并在那里存储/更新电池信息的信息。在进行更新之前,您会检查电池电量并且不要继续,除非它处于您觉得可以更新应用程序的水平。使用广播接收器很好,但您需要将级别存储在某个地方(可能是 sharedprefs)。相反,这就是为什么将接收器放在您进行更新的服务中可能是最好的原因。
关于android - 禁用电池百分比更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760544/
我开发游戏已经有一段时间了,我开始意识到我的应用程序很快就会耗尽设备电池。我通过 XCode 仪器测量了能量消耗,一般在 17/20 范围内。我有一些背景动画,禁用它们似乎确实有帮助。出于好奇,我使用
我有两个原型(prototype)电池。如果 messagesArray[indexPath.row] 值为“”,则出现一个,如果该值包含字符,则出现另一个。其中一个单元格的行高大于第二个单元格的行高
我有一个弹出窗口,弹出窗口内部是一个相机按钮,我的相机工作正常,但顶部的电池符号与相机重叠,下面是屏幕截图。 如果有人知道答案,我们将不胜感激。 最佳答案 您可以隐藏该 View 的状态栏,这样它就不
有没有办法从 Android SDK 获取电池信息?比如剩余电池生命周期等等?我无法通过文档找到它。 最佳答案 这是一个简单的示例,可以让您了解电池的使用量、电池电压和温度。 将以下代码粘贴到 Act
我想删除状态栏(显示时间和电池状态)。就像在涂鸦跳跃或其他游戏中一样。 我怎样才能做到这一点? 谢谢 :) 最佳答案 http://iphonesdkdev.blogspot.com/2008/06/
已经阅读了关于同一主题的其他 SO 帖子,并且在以下方法之间做出决定: Thread 1与 Thread 2与 simple onLocationUpdate() 有人可以帮助我了解所有这些的利弊吗?
最近 google 推出了推送到设备服务,但它仅适用于 2.2 及更高版本。 我的应用程序中需要一个类似的系统,并且我正在尝试绕过限制。 问题是电池生命周期。由于必须立即通知用户有关服务器上的更改,我
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。 6
我有两个原型(prototype) TableViewCells。现在,一个只是另一个的复制粘贴。 BasicCell 和 BasicCell2 。我刚刚为 BasicCell2 复制了 BasicC
我目前正在为 iPhone 开发一个聊天客户端。服务器端有一个带有 Socket.IO 的 node.js,在 iPhone 上有一个 Socket.IO 客户端( https://github.co
所以我发现没有公开的方法来获取 watchKit 中的电池电量。 所以没有UIDevice.currentDevice().batteryLevel和WKInterfaceDevice不接缝有货。 在
由于 Google 在其网站上提供了适用于 Android L 的更新 SDK。我一直在尝试测试新的电池历史记录功能。 Google API 概述 website声称该工具在 sdk/tools 下可
我已经安装了全新的 Catalina 和 Android Studio。事实证明,当我启动模拟器时,模拟器进程会占用大量 CPU 周期。查看 adb shell 中的 top,我得到了一些我不理解的进
我修复了 iOS 7 的问题,导航栏是重叠 TableView 。 我用这个代码 //for help navigation bar overlap if ([self respondsToSelec
今天,小爱同学官微发布消息宣布,Redmi 小爱触屏音箱 Pro 正式推出,该机搭载 8 英寸屏幕,配备电池可不用时刻连接电源,售价 499 元,新品将于 9 月 9 日 0 点正式开售。 作
我是一名优秀的程序员,十分优秀!