Android 广播

广播:

  • 有序广播

    • 发出广播之后同一时刻只有一个广播接收器能够接收到广播,优先级高的先接受,可以截断正在传递的广播,后面的就无法收到广播消息了.
  • 动态创建广播:
    • 创建一个类继承BroadcastReceiver,重写onReceive,有广播来到就会执行onReceive方法,动态注册的一定要取消注册.

      public class MainActivity extends Activity {
      private IntentFilter intentFilter;
      private NetworkChangeReceiver networkChangeReceiver;
      
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          intentFilter = new IntentFilter();
          intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");// 当系统发生变化时发出的是值为括号内的广播,想要监听什么广播就添加相应的action
          networkChangeReceiver = new NetworkChangeReceiver();
          registerReceiver(networkChangeReceiver, intentFilter);// 注册广播
      }
      
      protected void onDestroy() {
          super.onDestroy();
          // 动态注册的一定要取消注册
          unregisterReceiver(networkChangeReceiver);
      }
      
      class NetworkChangeReceiver extends BroadcastReceiver {
          // 每当网络发生变化就会执行此方法
          public void onReceive(Context arg0, Intent arg1) {
              //系统服务类,用来管理网络连接
              ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
              NetworkInfo networkInfo = connectivityManager
                      .getActiveNetworkInfo();
      
              if (networkInfo != null && networkInfo.isAvailable()) {
                  Toast.makeText(MainActivity.this, "网络可用", 0).show();
              }else{
                  Toast.makeText(MainActivity.this, "网络不可用", 0).show();
              }
      
          }
      
      }
      

      }

  • 静态注册实现开机自启
    • 创建一个类,继承自BroadcastReceiver,收到广播就会执行onReceive方法

          public class BootCompleteReceiver extends BroadcastReceiver {
      
      public void onReceive(Context arg0, Intent arg1) {
          Toast.makeText(arg0, "开机",0).show();
      
      }}
      
    • 清单文件注册:
      <receiver android:name=".BootCompleteReceiver" >
      <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
      </intent-filter>
      
  • 发送自定义广播:
    • 首先构建一个intent对象,然后调用Context的sendBroadcast()方法把广播发送出去,这样所有监听这条广播的都会接受到消息

      Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
      sendBroadcast(intent);
      
  • 发送有序广播
    Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
    sendOrderedBroadcast(intent, null);
    
    • 在注册清单的intent-filter中添加android:priority="100"属性来设置优先级,优先级越高越先收到.可以使用abortBroadcast();将广播截断.
  • 本地广播
    • 在应用程序的内部进行传递,并且广播接收器只能接受来自本应用的广播

      public class MainActivity extends Activity {
          private LocalReceiver localReceiver;
          private IntentFilter intentFilter;
          private LocalBroadcastManager localBroadcastManager;
      
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              localBroadcastManager = LocalBroadcastManager.getInstance(this);
      
              intentFilter = new IntentFilter();
              intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
              localReceiver = new LocalReceiver();
              localBroadcastManager.registerReceiver(localReceiver, intentFilter);
              //注册本地广播监听器
          }
      
          public void click(View v){
              Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
              localBroadcastManager.sendBroadcast(intent);//发送本地广播
      
          }
          class LocalReceiver extends BroadcastReceiver {
      
              public void onReceive(Context context, Intent arg1) {
                  Toast.makeText(context, "received local broadcast",
                          Toast.LENGTH_SHORT).show();
              }
      
          }
          protected void onDestroy() {
              super.onDestroy();
              localBroadcastManager.unregisterReceiver(localReceiver);
          }
      
      }
      

- 系统级别的弹窗

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("强制下线");
    builder.setMessage("在他处登录,你被强制下线");
    builder.setCancelable(false);//设置不可取消
    builder.setPositiveButton("OK",new OnClickListener() {

        public void onClick(DialogInterface arg0, int arg1) {
            //TODO
        }
    });
    AlertDialog dialog = builder.create();
    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    dialog.show();
时间: 2024-10-22 06:53:11

Android 广播的相关文章

Android广播机制(转)

1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间): 2.同一app内部的不同组件之间的消息通信(单个进程): 3.同一app具有多个进程的不同组件之间的消息通信: 4.不同app之间的组件之间消息通信: 5.Android系统在特定情况下与App之间的消息通

Android 广播的生命周期 &nbsp;

一:Android 广播的生命周期          一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg).当一个广播消息到达接收者是,Android调用它的onReceive()方法并传递给它包含消息的Intent对象.广播接收者被认为仅当它执行这个方法时是活跃的.当onReceive()返回后,它是不活跃的. 有一个活跃的广播接收者的进程是受保护的,不会被杀死.但是系统可以在任何时候杀死仅有不活跃组件的进

Android总结篇系列:Android广播机制

1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间): 2.同一app内部的不同组件之间的消息通信(单个进程): 3.同一app具有多个进程的不同组件之间的消息通信: 4.不同app之间的组件之间消息通信: 5.Android系统在特定情况下与App之间的消息通

Android广播BroadcastReceiver

Android广播BroadcastReceiver Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器.系统广播的发送者为系统,自定义广播当然是用户定义的了. 我们可以定义一个广播接收器,用来接收我们感兴趣的广播,不论是系统广播还是用户自定义广播.这个广播接收器必须继承至BroadcastReceiver. 老规矩,先来点基础知识. 一.基础知识

Android广播之注册广播(包括静态广播和动态广播的注册)源码分析

Android广播按发送方式分类有三种:无序广播.有序广播(OrderedBroadcast)和粘性广播(StickyBroadcast). 静态广播的注册流程: 在系统服务启动时会添加PackageManagerService,在该类的构造方法中就会对各个应用安装目录的apk文件进行扫描解析.先看下时序图: 先看PackageManagerService类的构造方法: // Keys are String (package name), values are Package. This als

Android广播机制

1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间): 2.同一app内部的不同组件之间的消息通信(单个进程): 3.同一app具有多个进程的不同组件之间的消息通信: 4.不同app之间的组件之间消息通信: 5.Android系统在特定情况下与App之间的消息通

Android广播机制剖析【android广播系列一】

广播是android四大组件之一,所以广播的重要性也是显而易见的,最近需要做个功能,需要对广播的机制深入了解,所以我就整理下思路.平时我们写代码的时候,广播只是用来通知机制的,不是用来通信机制,通信机制还是要用binder机制来实现.但是现在市场上的第三方app大部分都是滥用广播,用广播来监听一些事件来实现自启动或者后台启动.这就误解了谷歌的意思.本来很好的组件,被大家滥用,导致用户老是感觉手机的程序控制不住,老是后台偷偷启动.小白用户甚至更不理解了.好了现在言归正传. android广播按发送

Android 广播与服务

一,广播2种不同的注册方式的选择: Andorid 广播有手动注册与清单文件注册2种方式: 清单文件注册,不需要在代码中进行任何操作,甚至不需要实例化广播接收者.因为Android将会创建实例并管理它的生命周期.注意的是,接收onReceive()调用的实例只有在onReceive()的持续时间内有效.实际上,每个对onReceive()方法的调用都有可能是在不同的广播接收实例上进行.意味着必须避免异步调用其它类. 手动注册,必须在不用时注销广播,如果在一个活动中注销失败会导致一个异常,其中An

Android广播机制分析

1.1. 广播简介 Android 广播与生活中的广播概念不同,它是指系统中产生事件后的通知.Android 广播不关心接收者是否收到处理或者如何处理广播,可以说是一种单向的通知.        Android 通过 BraodcastReceiver 来监听系统发出的广播,不同的 BraodcastReceiver 通过设置不同的 fliter 来区分监听广播的类型.有些广播的监听需要相应的权限. 1.2. 注册广播 BraodcastReceiver 必须经过注册才能具有监听功能,注册的方式

Android 广播接收者 BroadcastReceiver

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间): 2.同一app内部的不同组件之间的消息通信(单个进程): 3.同一app具有多个进程的不同组件之间的消息通信: 4.不同app之间的组件之间消息通信: 5.Android系统在特定情况下与App之间的消息通信. 从实现原理看上,Andro