您的位置:华清远见教育科技集团 >> Android资料 >> Android开发之使用Intent发送广播消息  
 
Android开发之使用Intent发送广播消息
分享到:

应用程序和Android系统都可以使用Intent发送广播消息。其中,广播消息的内容可以是与应用程序密切相关的数据信息,也可以是Android的系统信息,例如,网络连接变化、电池电量变化、接收短信和系统设置变化等。如果应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息。

下面将介绍广播信息的使用方法。

首先,创建一个Intent。调用sendBroadcast()函数,就可把Intent携带的消息广播出去,如果要在Intent传递额外数据,可以用Intent的putExtra()方法。

注意:在构造Intent时必须用全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称。

利用Intent发送广播消息,并添加了额外的数据,然后调用sendBroadcast()发送广播消息的代码如代码清单6-22所示。

代码清单6-22 利用Intent发送广播消息


String UNIQUE_STRING = "com.example.BroadcastReceiverDemo";
    Intent intent = new Intent(UNIQUE_STRING);
    intent.putExtra("key1", "value1");
    intent.putExtra("key2", "value2");
    sendBroadcast(intent);

广播消息发送后,利用BroadcastReceiver监听广播消息。具体方法如下:在AndroidManifest.xml文件或在代码中注册一个BroadcastReceiver,并在其中使用Intent 过滤器指定要处理的广播消息。在BroadcastReceiver接收到与之匹配的广播消息后,onReceive()方法会被调用;onReceive()方法必须要在5秒内执行完毕,否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件。

创建BroadcastReceiver需继承BroadcastReceiver类,并重载onReceive()方法。代码如代码清单6-23所示。

代码清单6-23 利用BroadcastReceiver监听广播消息


public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //TODO: React to the Intent received.
        }
    }

BroadcastReceiver的应用程序不需要一直运行,当Android系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver。基于以上特征,BroadcastReceiver适合做一些资源管理的工作。

如图6-6所示,BroadcastReceiverDemo示例说明了如何在应用程序中注册BroadcastReceiver,并接收指定类型的广播消息。


图6-6 BroadcastReceiverDemo示例

如图6-6所示,在单击“发送广播消息”按钮后,EditText控件中内容将以广播消息的形式发送出去,示例内部的BroadcastReceiver将接收这个广播消息,并显示在用户界面的下方。

BroadcastReceiverDemo.java文件中包含发送广播消息的代码,其关键代码如代码清单6-24所示。

代码清单6-24 BroadcastReceiverDemo.java


button.setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            Intent intent = new Intent("com.example.BroadcastReceiverDemo");
            intent.putExtra("message", entryText.getText().toString());
            sendBroadcast(intent);
        }
    });

在上述代码中,第3行代码创建Intent,将com.example.BroadcastReceiverDem作为识别广播消息的字符串标识;第4行代码添加了额外信息;第5行代码调用sendBroadcast()函数发送广播消息。

为了能够使应用程序中的BroadcastReceiver接收指定的广播消息,首先要在AndroidManifest.xml文件中添加Intent过滤器,声明BroadcastReceiver可以接收的广播消息。其中,AndroidManifest.xml文件的完整代码如代码清单6-25所示。

代码清单6-25 AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="//schemas.android.com/apk/res/android"
        package="com.example.BroadcastReceiverDemo"
        android:versionCode="1"
        android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <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="com.example.BroadcastReceiverDemo" />
                </intent-filter>
            </receiver>
        </application>
        <uses-sdk android:minSdkVersion="3" />
    </manifest>

在上述代码中,第14行代码中创建了一个<receiver>节点;在第15行中声明了Intent过滤器的动作为“com.example.BroadcastReceiverDemo”,这与BroadcastReceiverDemo.java文件中Intent的动作相一致,表明这个BroadcastReceiver可以接收动作为“com.example. BroadcastReceiverDemo”的广播消息。

MyBroadcastReceiver.java文件创建了一个自定义的BroadcastReceiver,其核心代码如代码清单6-26所示。

代码清单6-26 MyBroadcastReceiver.java


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();
        }
    }

在上述代码中,第1行代码首先继承了BroadcastReceiver类;第3行代码重载了onReceive()函数,当接收到AndroidManifest.xml文件定义的广播消息后,程序将自动调用onReceive()函数。

 更多相关文章

·Android开发之使用Intent隐式启动Activity
·Android开发之Intent解析
·如何使用Intent显式启动Activity?
·Android开发中Intent属性详解
·Android开发之获取Activity返回值