欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-04-18 18:41:33
android intent发送广播消息 intent的另一种用途是发送广播消息,应用程序和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()函数进行消息处理。

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