小智 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广播意图.
所以你只需要接收它:
<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)
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)
| 归档时间: |
|
| 查看次数: |
4871 次 |
| 最近记录: |