Android获取当前电量信息(BroadcastReceiver的使用)
2015-08-31 22:59
483 查看
广播分为静态广播和动态广播,其实非常容易理解:
静态广播就是我们在xml文件中的application注册的广播,当我们退出应用时,广播依然在运行。动态广播是我们在代码中注册的广播,比如在activity中注册的广播,它的生命周期随着activity的结束而结束。
下面主要介绍一下动态注册广播获取当前电量信息,从BroadcastReceive中获取电量信息,并传递给activity,显示在textview中
xml文件中只有一个textview<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="当前电池电量" android:textSize="25dp" /> </RelativeLayout>
定义一个MyReceiver继承BroadcastReceiver,重写onReceive()方法,在方法中获取电量的信息
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //获取当前电量 int level = intent.getIntExtra("level", 0); //电量的总刻度 myListener.onListener(level+""); System.out.println(level + "%"); } //设置监听回调,用于把电量的信息传递给activity public MyListener myListener; public interface MyListener { public void onListener(String level); } public void setMyListener(MyListener myListener) { this.myListener = myListener; } }
在MainActivity中通过意图过滤器来注册广播,IntentFilter是对意图进行过滤的,就是我想要接收哪些广播,不想接收哪些广播,主要过滤Intent中Action,Data和Category的字段。
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);中Intent的参数ACTION_BATTERY_CHANGED,通过看源码知这是一个系统级别广播,作用就是获取当明电池的信息;
在MainActivity中的代码如下
public class MainActivity extends ActionBarActivity implements MyReceiver.MyListener { MyReceiver myReceiver; private TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview = (TextView) findViewById(R.id.textview); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); myReceiver = new MyReceiver(); registerReceiver(myReceiver, intentFilter); myReceiver.setMyListener(this); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); } //通过回调,得到BroadcastReceiver中的电量使用情况,并且设置给textview; @Override public void onListener(String level) { textview.setText(level + "%"); } }
最后运行结果:
注:如果我们不退出activity时,电池的电量随着时间变化而变化,比如我们如果在充电,就是在textview中看到电量的上升,但我们退出activity时,广播已经取消了,再次进行的时候,是重新获取的。
还有一点,就是我们在代码是注册的广播一定要在适合的时候注销,有人可能问activity关闭,广播不是不起作用了吗,为什么一定要关闭呢。如果没有及时关闭广播,广播在原有的activity中并不会注销,这是比较耗费内存资源的,因此对于在代码中注册的广播都要手工关闭,在onDestory()方法中注销就可以了。
相关文章推荐
- <Android>Activity生命周期
- 响应能力总结--Android
- Getting Started Android
- Android简单练习(TableLayout)
- Android中webview和js之间的交互及注意事项
- 感悟:分分钟搞定上拉刷新,下拉加载 Android新手
- android studio对从其他地方拷的代码报非法字符
- android传感器sensor
- 我的有史以来的第一篇博客 ——记录android学习之路
- android内核剖析 Context理解读书笔记
- eeyes总结
- android内核剖析 Framework 读书笔记
- Android Api Demos登顶之路(五十四)Service IsolateService Controller
- Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件
- Android学习之带图片的Button
- Android APK反编译详解(附图)
- Android layout属性大全
- 编写android HAL代码
- Android中的Drawable资源
- 【转载】Android设计中的.9.png