Broadcast学习之发送自定义广播

今天我们 学习Android broadcast如何发送自定义的广播。广播主要分为两种类型,标准广播和有序  广播。

API文档中关于BroadcastReceiver的概述:
广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的── 比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播 ── 比如说,通知其它应用程序一些数据下载完成并处于可用状态。
应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver 基类。
广播接收器没有用户界面。然而,它们可以启动一个activity 来响应它们收到的信息,或者用 NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力 ── 闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
那么广播事件的流程如何呢,如下:

注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml 文件中定义,注册的广播接收器必须要继承 BroadcastReceiver ;另一种是动态注册,是在程序中使用 Context.registerReceiver 注册,注册的广播接收器相当于一个匿名类。两种方式都需要 IntentFIlter

发送广播事件:通过Context.sendBroadcast 来发送,由 Intent 来传递注册时用到的 Action

接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive() 方法,并将包含消息的 Intent 对象传给它。 onReceive 中代码的执行时间不要超过 10s ,否则 Android 会弹出超时 dialog

具体做法:
在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发  出去也是白发。因此新建一个MyBroadcastReceiver 继承自  BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver {   
    @Override  
    public void onReceive(Context context, Intent intent) {   
      Toast.makeText(context, " 接收到广播消息 ", Toast.LENGTH_SHORT).show();    }  
}
这里当 MyBroadcastReceiver 收到自定义的广播时,就会弹出提示语。然后在  AndroidManifest.xml 中对这个广播接收器进行注册:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"               
  package="com.example.broadcasttest"     
  android:versionCode="1"
  android:versionName="1.0" >   
    ……     
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />   
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />         
      <application
        android:allowBackup="true"   
        android:icon="@drawable/ic_launcher"      
        android:label="@string/app_name"     
        android:theme="@style/AppTheme" >  
        <receiver android:name=".MyBroadcastReceiver" >      
            <intent-filter>                 
                <action android:name="com.example.broadcasttest.MY_BROADCAST" />
            </intent-filter>   
        </receiver>     
      </application>
</manifest>
可以看到,这里让 MyBroadcastReceiver  接收一条值为  com.example.broadcasttest. MY_BROADCAST 的广播,因此待会儿在发送广播的时候,我们就需要发出这样的一条广播。
public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {   
      super.onCreate(savedInstanceState);   
      setContentView(R.layout.activity_main);  
      Button button = (Button) findViewById(R.id.button);  
      button.setOnClickListener(new OnClickListener() {   
        @Override   
        public void onClick(View v) {  
          Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");         
          sendBroadcast(intent);   
        }
      });   
    }
}
可以看到,我们在按钮的点击事件里面加入了发送自定义广播的逻辑。首先构建出了一   Intent 对象,并把要发送的广播的值传入,然后调用了  Context 的  sendBroadcast() 方法将广 播发送出去,这样所有监听 com.example.broadcasttest.MY_BROADCAST  这条广播的广播接 收器就会收到消息。此时发出去的广播就是一条标准广播。


文章来自:博客园/cryAllen
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值