我想要监控电池电量,如果达到一定水平,我想做一些事情。 我担心的是不必要地耗尽太多电池。
使用服务将继续在后台运行。此外,如果我使用android.intent.action.BATTERY_CHANGED意图,它将检查电池级别的每一个变化。根据我的要求,这两种方法可能会耗尽不必要的电池。
因此,如果我使用AlarmManager(也是由OS处理的服务),它将检查每个用户定义的电池电量(适当的时间)。
以下是我实施的代码。
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));
}
}
广播接收器:
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
}
}
在清单中:
<receiver android:name="AlarmReceiverTest">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
</intent-filter>
</receiver>
许可:
android.permission.BATTERY_STATS
由于它是重复警报,即使应用程序已关闭,它也会继续检查。
例如:DO-SOMETHING:如果应用程序已经打开,可能会锁定应用程序或如果应用程序已经关闭,则不允许打开应用程序。
这是正确的做法吗?我的理解是否正确? 如果还有其他正确的方法,请建议我。
编辑:
如果我每隔5-10小时检查一次电池电量,最好的方法是什么?
答案 0 :(得分:6)
您不需要使用AlarmManager类。如果使用AlarmManager类,则应用程序会消耗更多电量。
最简单的方法是使用广告监听器来实现意图ACTION_BATTERY_CHANGED。
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都会运行。
在您的主要活动中注册广播接收器:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlarmReceiverTest mBatteryLevelReceiver = new AlarmReceiverTest();
registerReceiver(mBatteryLevelReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}