2010-11-09 41 views

回答

11

上面的答案(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的状态()的变化。这个广播只发送给已注册的接收者。

我测试了这个,它的工作原理。

+0

有没有办法简单地检查设备是否处于省电模式? – jmrodrigg 2017-01-20 10:34:28

+0

@jmrodrigg你可以使用 '''PowerManager pm =(PowerManager)context.getSystemService(Context.POWER_SERVICE); boolean powerSave == m.isPowerSaveMode(); ''' – nattster 2017-01-24 15:22:59

+0

@nattster谢谢! – jmrodrigg 2017-02-02 09:41:53

1

在进入省电模式之前,如何创建一个Android侦听器来执行任务?

这里没有广播Intent。最靠近的是ACTION_SCREEN_OFF。收到此广播后,该设备很可能会在不久的将来入睡。而且,您只能使用BroadcastReceiver通过registerReceiver()注册此活动或服务或其他Context来收听此广播。

此外:什么是可以由这项任务控制的一些低功率选项?

我不知道这是什么意思,对不起。

+0

屏幕关闭是省电功能的一部分,您可以在设置>应用程序>开发中将其禁用。其他省电功能可以通过应用程序控制关闭microSD卡接口等功能吗? – jacknad 2010-11-10 12:11:48

+0

@JackN:我不清楚你认为“关闭microSD卡接口”是。请参阅'android.provider.Settings.System'来了解您可以控制的事情。除了这个清单之外,没有什么能量相关的,我可以按照你似乎感兴趣的方向想想。 – CommonsWare 2010-11-10 13:21:17

7

由于棒棒糖(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 
     } 
    } 
} 
+0

它适合你吗?它写在文档“这个广播只发送给注册的接收者。” ... – 2017-08-30 11:52:36