首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android系统中电池电量监控的优化方法

android系统中电池电量监控的优化方法
EN

Stack Overflow用户
提问于 2014-09-19 11:16:16
回答 1查看 2.3K关注 0票数 0

我想监测电池的水平,如果它达到一定的水平,我想做一些事情。我担心的是不必要地耗尽了太多的电池。

使用服务将继续在后台运行。此外,如果我使用android.intent.action.BATTERY_CHANGED意图,它将检查电池水平的每一个变化。根据我的要求,这两种方法可能会耗尽不必要的电池。

因此,如果我使用AlarmManager(这也是OS处理的服务),它将检查每个用户定义的电池级别(适当的时间)。

以下是我已实施的守则。

代码语言:javascript
运行
复制
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {

private AlarmManager mAlarmManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

        mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        Intent intentAlarm = new Intent(this, AlarmReceiverTest.class);

        // User defined time
        long fiveMin= (AlarmManager.INTERVAL_FIFTEEN_MINUTES/3); // adjustment here

        mAlarmManager.setRepeating(AlarmManager.RTC,
                    System.currentTimeMillis()+fiveMin, oneMin, 
                    PendingIntent.getBroadcast(this,1,  intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));

    }

}

广播接收机:

代码语言:javascript
运行
复制
public class AlarmReceiverTest extends BroadcastReceiver {

@Override
public void onReceive(Context pContext, Intent arg1) {

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = pContext.registerReceiver(null, ifilter);

    int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
    int percent = (level*100)/scale;

    if(percent== myThreshold)
        //DO-SOMETHING
}

}

在清单中:

代码语言:javascript
运行
复制
<receiver android:name="AlarmReceiverTest">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED"/>
    </intent-filter>
</receiver>

许可:

代码语言:javascript
运行
复制
android.permission.BATTERY_STATS

因为它是一个重复的警报,所以即使应用程序关闭了,它也会继续检查。

做些什么:如果应用程序已经打开,则可以锁定应用程序,如果应用程序已经关闭,则不允许打开应用程序。

,这是正确的方法吗?我的理解是正确的吗?如果有其他合适的方法,会给我建议。

编辑:

如果我每隔5-10小时检查一次电池电量,那么最好的方法是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2014-09-19 11:56:37

您不需要使用AlarmManager类。如果使用AlarmManager类,则应用程序消耗更多的电池。

最简单的方法是使用广播侦听器来实现意图ACTION_BATTERY_CHANGED。

代码语言:javascript
运行
复制
public class AlarmReceiverTest extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            int batteryLevel = intent.getIntExtra(
                    BatteryManager.EXTRA_LEVEL, 0);
            int maxLevel = intent
                    .getIntExtra(BatteryManager.EXTRA_SCALE, 0);
            int batteryHealth = intent.getIntExtra(
                    BatteryManager.EXTRA_HEALTH,
                    BatteryManager.BATTERY_HEALTH_UNKNOWN);
            float batteryPercentage = ((float) batteryLevel / (float) maxLevel) * 100;

            // Do something with batteryPercentage and batteryHealth.
            // batteryPercentage here ranges 0-100
        }
    }

每次电池电量变化时,onReceive都会运行.

在您的主要活动中,注册广播接收器:

代码语言:javascript
运行
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AlarmReceiverTest mBatteryLevelReceiver = new AlarmReceiverTest();
    registerReceiver(mBatteryLevelReceiver, new IntentFilter(
            Intent.ACTION_BATTERY_CHANGED));
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25932677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档