Android省电模式监听器?

jac*_*nad 7 android

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

小智 14

上面的答案(针对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);
Run Code Online (Sandbox Code Playgroud)

原因是清单中的接收器不是由此广播触发的.

ACTION_POWER_SAVE_MODE_CHANGED

当isPowerSaveMode()的状态发生变化时广播的意图.该广播仅发送给注册接收者.

我测试了这个并且它有效.


小智 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>
Run Code Online (Sandbox Code Playgroud)


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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)