您的位置:首页 > 移动开发 > Android开发

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()方法中注销就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: