broadcastreceiver(android中BroadcastReceiver 收到的数据如何传递给前台的Activity显示)

本文目录
- android中BroadcastReceiver 收到的数据如何传递给前台的Activity显示
- 如何注册broadcastreceiver
- android broadcastreceiver需要注销吗
android中BroadcastReceiver 收到的数据如何传递给前台的Activity显示
用接口传。定义一个接口 让 Activity实现这个接口,然后接受者调用接口里面的方法把要传递的参数传进去。
例如用broadcastreceiver获得android手机的电池电量,并把电量显示到activity中:
广播接收者子类
package com.ht.dianliang;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
/**
* Created by annuo on 2015/5/16.
*/
public class DianLiangBR extends BroadcastReceiver {
private BRInteraction brInteraction;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
//获取当前电量
int current = bundle.getInt("level");
//获取总电量(电池的电池容量)
int total = bundle.getInt("scale");
brInteraction.setText("当前电量:" + current + ",总电量:" + total);
}
public interface BRInteraction {
public void setText(String content);
}
public void setBRInteractionListener(BRInteraction brInteraction) {
this.brInteraction = brInteraction;
}
}
activity代码
package com.ht.dianliang;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity implements DianLiangBR.BRInteraction {
private TextView textView;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.text);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
DianLiangBR dianLiangBR = new DianLiangBR();
registerReceiver(dianLiangBR, intentFilter);
dianLiangBR.setBRInteractionListener(this);
}
@Override
public void setText(String content) {
if (content != null) {
textView.setText(content);
}
}
}
如何注册broadcastreceiver
静态注册(在 AndroidManifest.xml 中 )
view plaincopy
《receiver android:name=".BroadcastReceiverDemo" 》
《intent-filter》
《action android:name="com.simware.BroadcastReceiverDemo" 》
《/action》
《/intent-filter》
《/receiver》
创建一个BroadcastReceiver
view plaincopy
public class BroadcastReceiverDemo extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String msg = intent.getStringExtra("message");
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
}
在onReceive方法内,可以获取随广播而来的Intent中的数据,这非常重要,就像无线电一样,包含很多有用的信息。在创建完我们的BroadcastReceiver之后,还不能够使它进入工作状态,我们需要为它注册一个指定的广播地址。没有注册广播地址的BroadcastReceiver就像一个缺少选台按钮的收音机,虽然功能俱备,但也无法收到电台的信号。在Manifest.xml文件中已经注册了BroadcastReceiver的广播地址。
《span style="font-size: 18px;"》 《/span》《span style="font-size:18px;"》Intent mIntent = new Intent("com.simware.BroadcastReceiverDemo");
mIntent.putExtra("message", showText.getText().toString());
sendBroadcast(mIntent);《/span》
android broadcastreceiver需要注销吗
需要,否则的话可能会产生内存泄露。
必须要,不然会报错,这是android的广播机制
BroadcastReceiver是一个用于监听应用程序运行环境变化,并且对变化事件作出响应的组件。譬如说,当电池电量低、SD卡拔插或者手机启动完毕等等事件发生的时候,系统都会广播相应的事件,那么,我们在应用程序中就可以利用BroadcastReceiver对这些事件进行监听,并且执行onReceive方法作出相应的处理。
我们可以通过两种方式注册BroadcastReceiver,一是在Activity启动过程中通过代码动态注册,二是在AndroidManifest.xml文件中利用《receiver》标签进行静态注册。对于第一种方法,我们需要养成一个良好的习惯:在Activity进入停止或者销毁状态的时候使用unregisterReceiver方法将注册的BroadcastReceiver注销掉。基于此,我们很自然就会想,如果通过第二种方法注册的BroadcastReceiver,是否需要通过代码进行注销呢?基于这个问题,Michael在OPhoneSDN上提出这个疑问。
最后,Michael还是从Android的源代码中找到了这样的注释:If this BroadcastReceiver was launched through a 《receiver》 tag, then the object is no longer alive after returning from this function. This means you should not perform any operations that return a result to you asynchronously. 这段文字告诉我们:如果通过《receiver》标签来注册的BroadcastReceiver,那么该对象的实例在onReceive被调用之后就会在任意时间内被销毁。也就是说,我们并需要担心静态注册的BroadcastReceiver的销毁问题。

本文相关文章:
非主流性感美女(访问自己的QQ空间,显示网页上有错误怎么办)
2025年7月9日 21:30
农业银行买定投宝,网银已付钱,但银河基金显示待扣款怎么办客服电话打不通?基金定投怎么算收益
2025年7月7日 02:45
qq空间被屏蔽了怎么办(怎样解决QQ空间动态不显示(被屏蔽)的好方法)
2025年7月7日 01:30
更多文章:
腾讯手机管家极速版(腾讯网卡免流量和不免流量的软件先用哪一个了)
2025年8月20日 06:00
360杀毒升级包下载(360杀毒软件升级包是什么 还需要用杀毒软件吗)
2025年5月5日 08:50
梦幻诛仙宝宝(梦幻诛仙手游宝宝怎么打书 4+4宝宝顶书技巧)
2025年6月11日 03:10
80后十大经典网络游戏(80后最受欢迎的十大PC游戏,你认识是什么)
2026年9月17日 05:10
app国家医保服务平台下载(国家医保服务平台app怎么下载)
2026年9月28日 05:30
快用ios下载(为什么我用苹果快用下载的应用老是会闪退有的又不会救助)
2026年1月8日 14:30
为什么ie打开是360(怎么打开IE浏览器为什么打开还是360浏览器,谷歌浏览器)
2025年12月5日 06:30
















