在Android中的某个电池级别执行一段代码

时间:2015-01-12 12:27:26

标签: java android android-intent batterylevel batterymanager

我正在寻找一种在手机电池寿命达到10%时在我的Android应用程序中执行一段代码的方法。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

以百分比获得电池电量

Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

float levelPert;
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

// Error checking that probably isn't needed but I added just in case.
if(level == -1 || scale == -1) {
    levelPert = 50.0f;
}

levelPert = ((float)level / (float)scale) * 100.0f; 

P.S。正如文档中提到的那样,BatteryManager具有粘性意图,因此无需添加清单声明。

您可以阅读有关获取电池details here

的更多信息

答案 1 :(得分:1)

来自developer.android.com:

  

您无法轻松持续监控电池状态,但您并不需要。   
  一般来说,持续监控电池电量对电池的影响比应用的正常行为对电池的影响更大,因此仅监控电池电量的重大变化是一种很好的做法 - 特别是当设备进入时或退出电池电量不足状态。

来自this link

答案 2 :(得分:0)

写一个接收器以获得这样的电池电量:

public class BatteryReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
    if (level < 10) {
        // Write your code here
    }
}

}

写一项服务:

public class BatteryService extends Service {

    private BatteryReceiver receiver;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        receiver = new BatteryReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(receiver, filter);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
}

在您的清单文件中注册此服务,如下所示:

<service android:name="com.example.testandroid.BatteryService" >
    </service>

然后在First Activity中启动服务就足够了。