Android省电模式监听器?

时间:2010-11-09 22:04:19

标签: android

如何在进入省电模式之前创建Android监听器来执行任务?另外:这项任务可以控制哪些低功耗选项?

3 个答案:

答案 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来收听此广播。

  

另外:这项任务可以控制哪些低功耗选项?

我不知道这意味着什么,抱歉。