当前位置: 移动技术网 > 移动技术>移动开发>Android > Android Intent发送广播消息实例详解

Android Intent发送广播消息实例详解

2019年07月24日  | 移动技术网移动技术  | 我要评论

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()函数进行消息处理。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网