如何在进入省电模式之前创建Android监听器来执行任务?另外:这项任务可以控制哪些低功耗选项?
答案 0 :(得分:12)
上面的答案(针对API 21及更高版本)并不完全正确。您应该在您的活动或服务中注册接收者,如下所示:
BroadcastReceiver powerSaverChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkPowerSaverMode();
}
};
IntentFilter filter = new IntentFilter();
filter.addAction("android.os.action.POWER_SAVE_MODE_CHANGED");
registerReceiver(powerSaverChangeReceiver, filter);
原因是清单中的接收器不是由此广播触发的。
ACTION_POWER_SAVE_MODE_CHANGED
当isPowerSaveMode()的状态发生变化时广播的意图。该广播仅发送给注册接收者。
我测试了这个并且它有效。
答案 1 :(得分:8)
自Lollipop(API 21)以来,有PowerManager#ACTION_POWER_SAVE_MODE_CHANGED广播意图。
所以你只需要接收它:
<小时/> 的AndroidManifest.xml:
<receiver android:name=".observers.PowerSaveModeReceiver">
<intent-filter>
<action android:name="android.os.action.POWER_SAVE_MODE_CHANGED"/>
</intent-filter>
</receiver>
<小时/> PowerSaveModeReceiver.java:
public class PowerSaveModeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if (BuildConfig.DEV_LOGS)
Log.d(this.getClass().getName(), String.format("onReceive(context = [%s], intent = [%s])", context, intent));
final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isPowerSaveMode()) {
// do something
} else {
// do some else
}
}
}
答案 2 :(得分:1)
如何在进入省电模式之前创建Android监听器来执行任务?
此处没有广播Intent
。最接近的是ACTION_SCREEN_OFF
。收到此广播后,该设备可能会在不久的将来入睡。而且,您只能使用BroadcastReceiver
在活动或服务中注册的registerReceiver()
或其他Context
来收听此广播。
另外:这项任务可以控制哪些低功耗选项?
我不知道这意味着什么,抱歉。