当前位置:首页 » 安卓系统 » 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#*#*进入手机信息选择电池信息,可以看到电池相关信息包括电压,电池容量,温度等信息。

热点内容
建设银行账号和密码是什么意思 发布:2025-07-04 16:35:37 浏览:144
feret人脸数据库 发布:2025-07-04 16:35:33 浏览:68
什么游戏要钱不要密码 发布:2025-07-04 16:30:33 浏览:475
安卓雕刻软件叫什么 发布:2025-07-04 16:30:22 浏览:817
mc服务器搭建简单吗 发布:2025-07-04 16:29:23 浏览:141
android动画曲线 发布:2025-07-04 16:16:57 浏览:513
扩展存储器读写实验 发布:2025-07-04 16:14:30 浏览:362
如果手机服务器不行的话怎么办 发布:2025-07-04 15:59:31 浏览:130
android开发sd卡 发布:2025-07-04 15:50:28 浏览:950
离歌脚本 发布:2025-07-04 15:50:13 浏览:416