1. 程式人生 > >Android電源管理,低電量報警

Android電源管理,低電量報警

Source code:

package com.inanwong.main;

import java.util.Timer;
import java.util.TimerTask;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;

public class PhoneBatTask {

	private static final int TIME_SPACE_DELAY = 1000;

	public static final int TIME_SPACE_PERIOD = 1800 * 1000;

	public static final int PB_LOWFLAG = 15;

	private Context context = null;

	private int intLevel = 100;
	private int intScale = 100;

	private int timeInterval = TIME_SPACE_PERIOD;
	private int lowFlag = PB_LOWFLAG;

	private boolean isStartRegister = false;

	private TimerTask batTask = new TimerTask() {
		@Override
		public void run() {
			if (!isStartRegister) {
				timer.cancel();
				return;
			}
			disposePower(intLevel, intScale);
		}
	};

	private final Timer timer = new Timer();

	/* create BroadcastReceiver */
	private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
				intLevel = intent.getIntExtra("level", 0);
				intScale = intent.getIntExtra("scale", 100);
			}
		}
	};

	private static final String TAG = "[PhoneBatTask]";

	PhoneBatTask() {
		// TODO Auto-generated constructor stub
	}

	public PhoneBatTask(Context context, int timeInterval, int lowFlag) {
		this.context = context;
		this.timeInterval = timeInterval;
		this.lowFlag = lowFlag;
	}

	public boolean registerBatterBroadCast() {
		boolean flag = false;
		try {
			this.context.registerReceiver(mBatteryInfoReceiver,
					new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
			flag = true;
			isStartRegister = true;
			timer.schedule(batTask, TIME_SPACE_DELAY, timeInterval);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Log.i(TAG, toString());
		return flag;
	}

	@SuppressWarnings("unused")
	private boolean unregisterBatterBroadCast() {
		boolean flag = false;
		try {
			this.context.unregisterReceiver(mBatteryInfoReceiver);
			flag = true;
			isStartRegister = false;
			timer.cancel();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	public synchronized void disposePower(int intLevel, int intScale) {
		if ((intLevel * 100) < (lowFlag * intScale)) {
			// do sth for power low ...
		}
		Log.i(TAG, "intLevel = " + intLevel + "; intScale = " + intScale);
	}

	public void setTimeInterval(int timeInterval) {
		if (this.timeInterval == timeInterval) {
			return;
		}
		if (isStartRegister) {
			this.timeInterval = timeInterval;
			timer.cancel();
			batTask.cancel();
			timer.schedule(batTask, TIME_SPACE_DELAY, timeInterval);
		}
		Log.i(TAG, toString());
	}

	public void setLowFlag(int lowFlag) {
		this.lowFlag = lowFlag;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuilder b = new StringBuilder();
		b.append("{ timeInterval=");
		b.append(timeInterval);
		b.append(" lowFlag=");
		b.append(lowFlag);
		b.append(" intLevel=");
		b.append(intLevel);
		b.append(" intScale=");
		b.append(intScale);
		b.append(" }");
		return b.toString();
	}

}

相關推薦

Android電源管理電量報警

Source code: package com.inanwong.main; import java.util.Timer; import java.util.TimerTask; import android.content.BroadcastReceiver; i

android之PowerManager 與電源管理解決滅屏狀態下來簡訊螢幕不會點亮問題

  可解決滅屏狀態下來簡訊螢幕不會點亮問題    PowerManager這個類主要是用來控制電源狀態的. 通過使用該類提供的api可以控制電池的待機時間,一般情況下不要使用。如果確實需要使用,那

Android電源管理-休眠簡要分析

轉自https://www.cnblogs.com/tangdoudou/p/3807936.html   工作需要,需要對這一塊深入學習。故在此做一點分析記錄,存疑解惑。 一、開篇  1.Linux 描述的電源狀態  - On(on)  

Android電源管理之三:PowerManager.WakeLock原始碼詳讀

PowerManager.WakeLock 有加鎖和解鎖兩種狀態,加鎖的方式有兩種,一種是永久的鎖,這樣的鎖除非顯式的放開,是不會解鎖的,所以這種鎖用起來要非常的小心。第二種鎖是超時鎖,這種鎖會在鎖住後一段時間自動解鎖。         在建立了PowerManager.W

Android 電源管理 -- wakelock機制

PowerManager.WakeLock 有加鎖和解鎖兩種狀態,加鎖的方式有兩種:     第一種是永久的鎖住,這樣的鎖除非顯式的放開,否則是不會解鎖的,所以這種鎖用起來要非常的小心。     第二種鎖是超時鎖,這種鎖會在鎖住後一段時間解鎖。 在建立了 PowerManager.WakeLock 後,有

Android電源管理系列之PowerManagerService(二)

WakeLock機制 PowerManager.WakeLock 為了延長電池的使用壽命,Android裝置會在一段時間後使螢幕變暗,然後關閉螢幕顯示,直至停止CPU進入休眠。WakeLock是Android提供的喚醒鎖機制,用來保持CPU執行或避免螢幕變暗/關閉以及避免鍵盤背光燈熄滅

Android電源管理系列之PowerManagerService(一)

  PowerManagerService 提供Android系統的電源管理服務,主要功能是控制系統待機狀態,螢幕顯示,亮度調節,光線/距離感測器的控制等。 相關程式碼在以下檔案中 frameworks/base/services/java/com/androi

Android電源管理機制剖析

        Android 的電源管理也是很重要的一部分。比如在待機的時候關掉不用的裝置,timeout之後的螢幕和鍵盤背光的關閉,使用者操作的時候該開啟多少裝置等等,這些都直接關係到產品的待機時間,以及使用者體驗。         一,電源管理相關檔案        

android 電源管理驅動

 g_workqueue = create_singlethread_workqueue("cvt_mid_power_adcwq");  INIT_WORK(&g_work, adc_work_func);  alarm_init(&g_alarm, ANDROID_ALARM_ELAPSE

android cookie管理解決網頁訪問不了的問題

在做專案中,不免會有部分專案是要管理cookie, 1、登入成功後,把cookie儲存起來,我專案中就把cookie儲存到Application裡: 獲取cookie /** * 獲取標準 Coo

關於android電源管理監聽事件

原文地址:http://www.pocketdigi.com/20140608/1341.html(尊重勞動成果!) 當你在更改後臺更新頻率來減少這些更新對電池壽命的影響時,檢查當前電量和充電狀態是一個好的開始。 電池壽命通過剩餘電量和充電狀態來影響應用更新的執行。當用交

Android9.0 P 電源管理(android電量優化功能改進)

Android 9(API 28)電源管理 在最近幾個android版本中已存在的電量優化功能基礎上,Android 9 引入了一些新功能來持續改進裝置電源管理,以確保將系統資源提供給最需要它們的應用

支援動態調頻,AXP228電源管理,預留鋰電池介面內建充放電電路及電量計iTOP-4418開發板

iTOP-4418開發板 支援動態調頻,AXP228電源管理,預留鋰電池介面,內建充放電電路及電量計 核心板320PIN全引出,

源代碼管理工具-(核心算法:檢查數據優先級高前置壓縮)

我不 -c adg 編輯 編輯狀態 usually git pull crypt 地面 GIThttp://blog.csdn.net/weishinexk/article/details/51454167 一. git 概述 1. git 簡介? 什麽是git?

當我們按下電源Android 究竟做了些什麽?

git 實踐 系統服務 深度 希望 load() 特定 機器 父進程 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由goo發表於雲+社區專欄 相信我們對Android系統都不陌生,而Android系統博大精深,被各種各樣的智能設備承載的同時,我們會否好

Android 許可權管理(那些需要申請許可權哪些不需要申請許可權)

6.0許可權的基本知識,以下是需要單獨申請的許可權,共分為9組,每組只要有一個許可權申請成功了,就預設整組許可權都可以使用了。   group:android.permission-group.CONTACTS     permission:android.perm

當我們按下電源Android 究竟做了些什麼?

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由goo發表於雲+社群專欄 相信我們對Android系統都不陌生,而Android系統博大精深,被各種各樣的智慧裝置承載的同時,我們會否好奇過,如此複雜的Android究竟是怎麼運作起來的呢?

實戰Android:通過BroadcastReceiver監聽Home電源Power和音量變化Volume鍵

上一個例子是採用AccessibilityService來實現按鍵的監聽。這次我們採用BroadcastReceiver來完成按鍵的監聽。 缺點:我嘗試了一下,暫時還不知道如何停止按 鍵的預設行為,比如我確實監聽到了電源按鍵,但卻沒法阻止此刻螢幕變黑的行為。先在這記下。以後

關於Android 6.x 及以上許可權管理閃退

原因1. 沒有授權檢查; 原因2. 許可權檢查與宣告不匹配  例如: 近期,維護一個接手的App,由於歷史原因,沒有許可權管理,直接導致在高版本的Android上閃退。 直接匯入了以前專案使用的以下程式碼 public static String[] check

電源管理android核心suspend to disk的實現(九)--tuxonice實現方案

完成在標準核心基礎上的android系統的suspend to disk後,又採取了tuxonice補丁的方式進行比較,發現由於壓縮的緣故,速度有所提高10s左右。 該範方案的實現我是根據我的一位離職的同事寫學習筆記進行測試,實驗證明是可行的,以下部分程式的講解我也直接進