[Android]如何即时地获取系统的电量

最近有一个需求,需要即时地去获取系统的电量信息,某度上搜了下,几乎都是用

ACTION_BATTERY_CHANGED

这个事件广播去获取系统电量,但是这个方法有个问题:不知道系统什么时候发广播,所以没法即时地获取,需要等待广播。

后来google了一下,果然发现还是有办法的,而且办法相当简单(都怪自己没有认真去读文档)。

只需要用以下代码就可以获取实时的电量:

private float getBattery(){
        Intent intent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        if(intent == null){
            return 0f;
        }
        int level = intent.getIntExtra("level", 0);
        int scale = intent.getIntExtra("scale", 100);
        return ((float)level) / scale;
    }

原理也很简单,原来这个电量广播是一个STICKY BROADCAST,每次都会把上一次的广播内容保存,所以register的时候就可以立即获取一个Intent,里面就有着电量的数据了。

当然,严格地说这个数据是有点过期的,但是这点差异大部分情况下都是可以忽略的。

果然出了问题还是要经常看文档,Google以及stackoverflow等,度娘有时候真是有限。

时间: 2024-10-16 05:25:57

[Android]如何即时地获取系统的电量的相关文章

Android如何通过shareduserid获取系统权限

转载:http://my.oschina.net/zhoulc/blog/119282 android会为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的.通 过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样(使用IPC机制,

Android如何获取系统高度、标题栏和状态栏高度

在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息.为以后方便,在此做个简单记录. 晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文http://www.iteye.com/topic/828830 ) 1. 屏幕区域的获取 [java] view plaincopy activity.getWindowManager().getDefaultDisplay(); 2.应用区域的获取 [java] view plaincopy R

[android] 获取系统的联系人信息

内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者. 找到/data/data/com.android.providers.contacts/contacts2.db 这个目录下还有个文件contacts2.db.-journal,这个文件和数据库的事务相关 联系人应用数据库的主要结构 raw_contacts 联系人表 contact_id 联系人id data数据表  raw_contact_id联系人id,mimetype_id数据类id,data1数据

Android中StatFs获取系统/sdcard存储(剩余空间)大小

package com.orgcent.util; import java.io.File; import android.os.Environment; import android.os.StatFs; public class MemoryStatus { static final int ERROR = -1; /** * 外部存储是否可用 * @return */ static public boolean externalMemoryAvailable() { return andr

Android开发之获取系统所有进程信息。

最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BUG.好了,来看看效果: 1.获取系统的可用内存和总内存. 获取系统内存中应用的信息,需要用到ActivityManager这个类,然而当你用这个类拿数据的时候你会发现,拿到的数据不正确.用这个类的API获取系统的总内存和可用内存会出现数据不正确的情况.除了这个类,Android手机中有文件描述了这些

Android获取系统时间方法详解

Android获取系统时间方法的方法有很多种,常用的有Calendar.Date.currentTimeMills等方法. (1)Calendar Calendar获取系统时间首先要用Calendar.getInstance()函数获取一个实例,再为该实例设定时区(中国的时区为GMT+8:00),最后使用Calendar.get()函数获取时间的具体信息,如年,月,日,小时,分,秒,星期几. package com.hzhi.time_example; import java.util.Cale

Android开发之获取系统12/24小时制的时间

//通过DateFormat获取系统的时间 String currentTime=DateFormat.format("yyyy-MM-dd hh-mm-ss", new Date()).toString(); currentTime="通过DateFormat获取的时间:\n"+currentTime; //通过SimpleDateFormat获取24小时制时间 SimpleDateFormat sdf=new SimpleDateFormat("yyy

Android中Environment与StatFs获取系统/SDCard存储空间大小

近期想起Android开发的知识.好久没有使用了,都忘得几乎相同了,今天查看了一会资料往回捡捡,顺便写下来帮助一下须要的同学. 首先讲述一下Environment与StatFs这两个类,然后介绍它们的具体用法. 1. Environment 类: Environment 是一个提供訪问环境变量的类. Environment 包括常量: MEDIA_BAD_REMOVAL 解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除 MEDIA_CHECKIN

[转载]如何使Android应用程序获取系统权限来修改系统时间

在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用. 本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的. 第一个方法简单点,不过需要在