Android Intent发送广播消息实例详解
android intent发送广播消息
intent的另一种用途是发送广播消息,应用程序和android系统都可以使用intent发送广播消息,广播消息的内容是可以与应用程序密切相关的数据信息,也可以是android的系统信息,例如网络连接变化、电池电量变化、接收的短信或系统设置变化等。如果应用程序注册了broadcastreceiver,则可以接受到指定的广播信息。
使用intent发送广播消息非常简单,只须创建一个intent,并调用sendbroadcast()函数就可把intent携带的信息广播出去。但需要注意的是,在构造intent时必须定义一个全局唯一的字符串,用来标识其要执行的动作,通常使用应用程序包的名称。如果要在intent传递额外数据,可以用intent的putextra()方法。下面的代码构造了用于广播消息的intent,并添加了额外的数据,然后调用sendbroadcast()发送广播消息:
string unique_string="edu.hrbeu.broadcastreceiverdemo"; intent intent=new intent(unique_string); intent.putextra("key1","value1"); intent.putextra("key2","value2"); sendbroadcast(intent);
broadcastreceiver用于监听广播消息,可以在androidmanifest.xml文件或代码中注册一个broadcastreceiver,并使用intent过滤器指定要处理的广播消息。创建broadcastreceiver须要继承broadcastreceiver类,并重载onreceive()方法。示例代码如下:
public class mybroadcastreceiver extends broadcastreceiver{ @override public void onreceive(context context,intent intent){ //todo: react to the intent received. } }
当android系统接收到与注册broadcastreceiver匹配的广播消息时,android系统会自动调用这个broadcastreceiver接收广播消息。在broadcastreceiver接收到与之匹配的广播消息后,onreceiver()方法会被调用,但onreceive()方法必须要在5秒钟内执行完毕,否则android系统会认为该组件失去响应,并提示用户强行关闭该组件。
下面为一个简单示例
发送广播消息关键代码
botton.setonclicklistener(new onclicklistener()){ public void onclick(view view){ intent intent=new intent("edu.hrbeu.broadcastreceiverdemo"); intent.putextra("message",entrytext.gettext().tostring()); sendbroadcast(intent); } }};
在androidmanifest.xml 文件中注册 broadcastreceiver
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.hrbeu.broadcastreceiverdemo"> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/apptheme"> <activity android:name=".broadcastreceiverdemo" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <receiver android:name=".mybroadcastreceiver"> <intent-filter> <action android:name="edu.hrbeu.broadcastreceiverdemo"/> </intent-filter> </receiver> </application> </manifest>
在androidmanifest.xml文件中创建了一个< receiver >节点,其中声明了intent过滤器的动作为 edu.hrbeu.broadcastreceiverdemo,这与发送广播消息中的intent的动作一致,表明这个broadcastreceiver可以接受动作为edu.hrbeu.broadcastreceiverdemo 的广播消息。
mybroadcastreceiver.java中创建了一个自定义的broadcastreceiver,其核心代码如下:
public class mybroadcastreceiver extends broadcastreceiver{ @override public void onreceive(context context,intent intent){ string msg=intent.getstringextra("message"); toast.maketext(context,msg,toast.length_short).show(); } }
代码第一行首先继承了broadcastreceiver类,并在第3行重载了onreveive()函数。当接收到androidmanifest.xml文件定义的广播消息后,程序将自动调用onreveive()函数进行消息处理。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!