Broadcast学习之发送自定义广播

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32506555/article/details/52435459
今天我们学习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
展开阅读全文

没有更多推荐了,返回首页