當前位置:首頁 » 安卓系統 » android監聽電量

android監聽電量

發布時間: 2023-04-15 03:27:09

Ⅰ Android 怎樣控制電量百分比是否顯示

我的Android版本是5.1。
我是這樣去實現的:

首先-----》我在priv-app/Settings裡面的battery裡面加一條SwitchPreference,這個是是否顯示的開關。
通過這個開關將值寫入資料庫中。然後SystemUI就可以取到這個值控制是否顯示
這個battery控制界面是PowerUsageSummary,它是一個PreferenceFragment。
它的界面的繪制是通過好幾種途徑,最後都通過addPreference加到一個PreferenceGroup裡面了。

然後-----》我需要改frameworks層的東西,
1>在android.provider.Settings類的System下面加一個String類型的名字,
System對應的是資料庫的名字
例如BATTERY_POWER_PERCENTAGE
2>要修改SettingsProvider這個應用,它是Settings的資料庫管理應用,
主要提供了一系列操作資料庫的方法,先在defaults.xml裡面添加一個integer變數,
給他一個初始值0,0對應不顯示,1對應顯示。然後找打DatabaseHelper這個類,
它是一個sqliteOpenHelper,它封裝了一系列操作sqlite資料庫的方法,
我們在loadSystemSettings方法裡面可以將直接在defaults.xml定義的值寫入資料庫。
3>我們要修改SystemUI這個應用,看過源碼才知道,其實狀態欄是分3個顯示的,
鎖屏的時候是一個,對應的類是KeyguardStatusBarView,它是一個RelativeLayout,
對應的布局是Keyguard_status_bar.xml

進入後是一個,對應的類是PhoneStatusBar,它是BaseStatusBar的子類
對應的布局是status_bar.xml.xml

下拉通知菜單的時候又是一個,對應的類是StatusBarHeaderView,它是一個RelativeLayout
它對應的布局是Status_bar_expanded_header.xml

要想監聽到電量的變化,必須實現BatteryController.BatteryStateChangeCallback這個介面,
它有兩個方法,其中onBatteryLevelChanged方法就是監聽電量變化的
BatteryController是一個BroadcastReceiver,當電量變化時可以收到

PowerManager.ACTION_POWER_SAVE_MODE_CHANGED這個action,

這時就會走onBatteryLevelChanged方法,所有我們只要實現這個介面就可以監聽到。
KeyguardStatusBarView和StatusBarHeaderView是有實現的,所以在這里我將
PhoneStatusBar也實現了這個介面。當然這不是控制電量百分比是否顯示,

在設置裡面我們已經加了一個控制開關,它會將值寫入資料庫,我們在PhoneStatusBar
類中只需要寫一個ContentObserver來監聽改變來控制,其實這個百分比是一個textview,
PhoneStatusBar對應的布局是status_bar.xml,在裡面加一個textview在自定義電池圖標的下面,
在代碼中只需要用setVisibility方法就可以控制。

KeyguardStatusBarView也是一樣這樣實現。

好了說了這么多,其實要編譯和push的有4個東西,frameworks.jar Setting.apk
SettingsProvider.apk SystemUI.apk

Ⅱ Android開發中 在Activity中 如何實時監聽 Service 中某個變數的變化

舉個例子你會理解的更快:X, Y兩個listview,X里有1,2,3,4這4個item,Y里有a,b,c,d這4個item。
如果你點了b這個item。如下:

public void onItemClick (AdapterView<?> parent, // parent相當於listview Y適配器的一個指針,可以通過它來獲得Y里裝著的一切東西,再通俗點就是說告訴你,你點的是Y,不是X - -、
View view, // view是你點b item的view的句柄,就是你可以用這個view,來獲得b里的控制項的id後操作控制項
int position, // position是b在Y適配器里的位置(生成listview時,適配器一個一個的做item,然後把他們按順序排好隊,在放到listview里,意思就是這個b是第position號做好的)
long id // id是b在listview Y里的第幾行的位置(很明顯是第2行),大部分時候position和id的值是一樣的,如果需要的話,你可以自己加個log把position和id都弄出來在logcat里瞅瞅,看了之後心裡才踏實
)

Ⅲ Flutter與Android通信的三種方式

一、 MethodChannel
主要是flutter端調用android方法。flutter調取android方法,也可以android主動跟flutter通信,但是這個只能是傳遞數據,不是調方法。MethodChannel的flutter調取android方法,我之前寫過,可以查看如下鏈接, https://www.jianshu.com/p/6b677ff3350e

Android主動跟flutter通信,如下

二、 BasicMessageChannel
它是可以雙端通信的,flutter端可以給Android發送消息,Android也可以給Flutter發送消息。

三、EventChannel
只能是原生發送消息給Flutter端,例如監聽手機電量變化,網路變化,感測器等。

列印結果如下:

總結一下:
MethodChannel 用於傳遞方法調用(method invocation),是flutter調取原生方法的,也可以原生主動傳遞數據給Flutter。
BasicMessageChannel 用於傳遞字元串和半結構化的信息。是兩個端相互發送數據,接收數據的。
EventChannel 用於數據流(event streams)的通信。通長用於Nativie向flutter的通信,如:手機電量變化,網路連接變化,陀螺儀,感測器等;

tip:多種類型的通道混用可能會出現報錯問題。

Ⅳ 有沒有什麼方法能夠快速,實時的獲取android手機的電量值

這個是獲取android電量的DEMO:

package com.android.batterywaster;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.BatteryManager;

import android.os.Bundle;

import android.os.PowerManager;

import android.view.View;

import android.widget.CheckBox;

import android.widget.TextView;

import java.text.DateFormat;

import java.util.Date;

/**

* So you thought sync used up your battery life.

*/

public class BatteryWaster extends Activity {

TextView mLog;

DateFormat mDateFormat;

IntentFilter mFilter;

PowerManager.WakeLock mWakeLock;

SpinThread mThread;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// Set the layout for this activity. You can find it

// in res/layout/hello_activity.xml

setContentView(R.layout.main);

findViewById(R.id.checkbox).setOnClickListener(mClickListener);

mLog = (TextView)findViewById(R.id.log);

mDateFormat = DateFormat.getInstance();

mFilter = new IntentFilter();

mFilter.addAction(Intent.ACTION_BATTERY_CHANGED);

mFilter.addAction(Intent.ACTION_BATTERY_LOW);

mFilter.addAction(Intent.ACTION_BATTERY_OKAY);

mFilter.addAction(Intent.ACTION_POWER_CONNECTED);

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);

mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "BatteryWaster");

mWakeLock.setReferenceCounted(false);

}

@Override

public void onPause() {

stopRunning();

}

View.OnClickListener mClickListener = new View.OnClickListener() {

public void onClick(View v) {

CheckBox checkbox = (CheckBox)v;

if (checkbox.isChecked()) {

startRunning();

} else {

stopRunning();

}

}

};

void startRunning() {

log("Start");

registerReceiver(mReceiver, mFilter);

mWakeLock.acquire();

if (mThread == null) {

mThread = new SpinThread();

mThread.start();

}

}

void stopRunning() {

log("Stop");

unregisterReceiver(mReceiver);

mWakeLock.release();

if (mThread != null) {

mThread.quit();

mThread = null;

}

}

void log(String s) {

mLog.setText(mLog.getText() + "\n" + mDateFormat.format(new Date()) + ": " + s);

}

BroadcastReceiver mReceiver = new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

String title = action;

int index = title.lastIndexOf('.');

if (index >= 0) {

title = title.substring(index + 1);

}

if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {

int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

int icon = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,-1);

log(title + ": level=" + level + "\n" + "icon:" + icon);

} else {

log(title);

}

}

};

class SpinThread extends Thread {

private boolean mStop;

public void quit() {

synchronized (this) {

mStop = true;

}

}

public void run() {

while (true) {

synchronized (this) {

if (mStop) {

http://www.dewen.io/q/1428

wipe電池如下:
1、把電池充滿,充滿滿的,在開機狀態下沖到滿,然後拔下充電器,手機關機,再插上充電器充電,直至再次顯示充滿,拔下充電器,開機再充電,這樣反復幾次就能把電池充到盡量滿的狀態。
2、然後關機,開機進入Recovery模式。
選擇advanced(高級功能) -> wipe battery stats(清空電池狀態)->yes(是)
然後++++ Go Back(返回上級) ++++ --> - reboot system now(重啟系統) -

Ⅳ Android 中流量,電量,弱網環境怎麼測

用Charles工具做弱網的測試,或者模擬2G、3G的網路情況。

通過抓包是流量測試直接的方法。在App運行器件,把手機收發的所有報文抓取下來,在計算收發報文總大小,即app消耗的流量。如果我們需要測試某個app消耗 的流量需要禁用其他app的連網許可權。
1)限制其他app的連網許可權,因為有些app的進程是常駐後台的,即使不運行,也會有網路報文。可以藉助一些手機管家軟體禁用網路。
2)手機上抓包,下載tcpmp,手機鏈接電腦,獲得root許可權
3)將tcpmp(forAndroid)上傳至android手機上,在命令提示符窗口中輸入命令:adbpush <LocalPath of tcpmp> /data/local/tcpmp

4)給tcpmp增加可執行許可權
adb shell
su
chmod 6755 /data/local/tcpmp

5)啟動抓包,使用命令/data/local/tcpmp-v -i any -s 0 -w /sdcard/zhangyu.pcap
Got後面的數字表示當前抓到的包的數量。如果有變化,表示有網路流量

6)導出抓包結果adb pull /sdcard/zhangyu.pcap <LocalPathof PcapFile >
7)用Wireshark打開剛才的抓包結果,點擊StatisticsàSummary,流量的數值為Bytes一行的Displayed一欄。

Ⅵ android 系統里是間隔多長時間去更新電池信息的。在代碼里哪部份實現的呢

這個時間不固定吧。如果系統的監聽器監聽到電量發生不會,就會發布廣播的。
private OnCheckedChangeListener listener=new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

}else{
bar.setProgress(0);
unregisterReceiver(myBroadcast);
}
}

};

Ⅶ android怎麼充電時檢測電池電量

撥號界面輸入*#*#4636#*#*進入手機信息選擇電池信息,可以看到電池相關信息包括電壓,電池容量,溫度等信息。

熱點內容
php成員變數 發布:2024-05-21 16:21:50 瀏覽:987
眷思量迅雷下載ftp 發布:2024-05-21 16:18:24 瀏覽:307
斗羅大陸怎麼自己建伺服器 發布:2024-05-21 16:03:23 瀏覽:738
河南網通伺服器託管雲主機 發布:2024-05-21 15:46:00 瀏覽:170
sqlserver資料庫連接數 發布:2024-05-21 15:37:32 瀏覽:22
安卓一體機如何設置開機直達信源 發布:2024-05-21 15:31:58 瀏覽:37
糾錯碼的編譯過程 發布:2024-05-21 15:31:56 瀏覽:240
電腦三千五怎麼配置 發布:2024-05-21 15:27:49 瀏覽:935
買車不能要什麼配置 發布:2024-05-21 14:56:20 瀏覽:427
無錫皮箱密碼鎖哪裡賣 發布:2024-05-21 14:31:03 瀏覽:472