我想監視電池電量,如果它達到一定的水平,我想做的事情。 我擔心的是不必要地耗盡太多電池。正確優化的方式來監測android中的電池電量
使用服務將繼續在後臺運行。此外,如果我使用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小時間隔,這將是這樣做的最好方法是什麼?
爲什麼人們downvote這個了什麼? @Sats答案非常適合我需要的。 – hellaandrew 2016-03-16 05:27:52