Android power save mode listener?

匿名 (未验证) 提交于 2019-12-03 02:26:02

问题:

How can an Android listener be created to perform a task just before entering power save mode? Also: what are some of the low power options that can be controlled by this task?

回答1:

The answer above(for API 21 and above) is not exactly right. You should register a receiver in your activity or service like this:

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); 

The reason for this is that receivers in manifest are not triggered by this broadcast.

ACTION_POWER_SAVE_MODE_CHANGED

Intent that is broadcast when the state of isPowerSaveMode() changes. This broadcast is only sent to registered receivers.

I have tested this and it works.



回答2:

Since Lollipop (API 21) there is PowerManager#ACTION_POWER_SAVE_MODE_CHANGED broadcast intent.

So you need just to receive it:


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         }     } } 


回答3:

How can an Android listener be created to perform a task just before entering power save mode?

There is no broadcast Intent for this. The closest is ACTION_SCREEN_OFF. The device will likely fall asleep in the near future after you receive this broadcast. And, you can only listen for this broadcast using a BroadcastReceiver registered via registerReceiver() in an activity or service or other Context.

Also: what are some of the low power options that can be controlled by this task?

I have no idea what this means, sorry.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!