• 浅谈BroadcastReceiver的用法


      最近看了下关于广播方面的东西,加深了理解,也纠正了自己以前的不正确的看法。

      关于广播有2中注册方式,一种是在代码中注册,也叫动态注册,另一种是在AndroidManifest里面注册,也叫静态注册。

      不管在哪个里面注册,都需要发送广播sendBroadcast()。广播发送的是一个Intent,intent里面一般是action。

      如果是在代码里面注册,一般在onResume()方法里面注册。

    1 @Override
    2 protected void onResume() {
    3 // TODO Auto-generated method stub
    4  
    5 myReceiver = new MyReceiver();
    6 IntentFilter filter = new IntentFilter();
    7 //向过滤器中添加action
    8   filter.addAction("com.android.shang");
    9 //注册广播
    10   registerReceiver(myReceiver, filter);
    11
    12 Intent intent = new Intent();
    13 intent.setAction("com.android.xiang");
    14 //发送广播
    15   sendBroadcast(intent);
    16 super.onResume();
    17 }

      在onPause()方法里面要取消注册。

    1 @Override
    2 protected void onPause() {
    3 // TODO Auto-generated method stub
    4 unregisterReceiver(myReceiver);
    5 super.onPause();
    6 }

      当然,也可以在xml文件中注册:

    1 <receiver
    2 android:name=".MyBrocastReceiverTest">
    3 <intent-filter>
    4 <action android:name="com.android.xiang"></action>
    5 </intent-filter>
    6 </receiver>

      如果发送的广播的action已经注册了,那么在onReceive()方法中就会接收到发过来的广播,继而做出一些处理。

      你可以写出一个内部类:

    1 class MyReceiver extends BroadcastReceiver {
    2
    3 @Override
    4 public void onReceive(Context context, Intent intent) {
    5 // TODO Auto-generated method stub
    6 //从这里的log中可以看到是否接受到了广播
    7 System.out.println("intent = " + intent);
    8 }
    9
    10 }

      当然也可以单独写一个类:

    package com.android.TestBrocastReceiver;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;

    public class MyBrocastReceiverTest extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    System.out.println("intent = " + intent);
    }

    }

      一般如果在代码里面注册,就把广播写在代码里面,在xml文件中注册就单独写一个类。

      注册在代码里面:

    1 package com.android.TestBrocastReceiver;
    2
    3 import android.app.Activity;
    4 import android.content.BroadcastReceiver;
    5 import android.content.Context;
    6 import android.content.Intent;
    7 import android.content.IntentFilter;
    8 import android.os.Bundle;
    9
    10 public class TestBrocastReceiver extends Activity {
    11
    12 MyReceiver myReceiver;
    13
    14 @Override
    15 public void onCreate(Bundle savedInstanceState) {
    16 super.onCreate(savedInstanceState);
    17 setContentView(R.layout.main);
    18 }
    19
    20 @Override
    21 protected void onPause() {
    22 // TODO Auto-generated method stub
    23 unregisterReceiver(myReceiver);
    24 super.onPause();
    25 }
    26
    27 @Override
    28 protected void onResume() {
    29 // TODO Auto-generated method stub
    30
    31 myReceiver = new MyReceiver();
    32 IntentFilter filter = new IntentFilter();
    33 //向过滤器中添加action
    34 filter.addAction("com.android.shang");
    35 //注册广播
    36 registerReceiver(myReceiver, filter);
    37
    38 Intent intent = new Intent();
    39 intent.setAction("com.android.xiang");
    40 //发送广播
    41 sendBroadcast(intent);
    42 super.onResume();
    43 }
    44
    45 class MyReceiver extends BroadcastReceiver {
    46
    47 @Override
    48 public void onReceive(Context context, Intent intent) {
    49 // TODO Auto-generated method stub
    50 //从这里的log中可以看到是否接受到了广播
    51 System.out.println("intent = " + intent);
    52 }
    53 }
    54 }

      注册在xml文件中:

    在xml文件中注册,写上一个广播类,然后在activity中发送广播就可以了。

    有时系统会发出一些广播,比如说时间的变化等,时间走一秒就会发一个广播,这时我们可以监听这个广播,然后在接收器中做处理就可以了,而不需要在发广播了。

  • 相关阅读:
    Bloom Filter(布隆过滤器)的概念和原理
    [转]模式匹配的KMP算法详解
    字符串搜索算法
    一个10转14进制的代码(写的很巧)
    几个优秀的js框架的license问题,付费,版权,侵权(extj,jquery,YUI,coolite)
    mysql时间戳转成常用可读时间格式方法两种
    单件模式(Singleton Pattern)
    建造者模式(Builder Pattern)
    [转]U盘隐藏文件恢复程序+源码
    [转载]内存分配 知识,全局,局部,静态变量
  • 原文地址:https://www.cnblogs.com/shang53880/p/1954420.html
Copyright © 2020-2023  润新知