笔记_第五章

第五章

  • 广播分类

    • 标准广播,完全异步,所有广播接收器都会在同一时刻接收到广播,不可拦截

    • 有序广播,同步广播,广播接收器按照优先级接收广播,同一时刻只会有一个接收器能收到广播,等接收器的逻辑处理完后,再把广播传递出去,也可以选择把广播拦截。

  • 广播接收器可以根据自己感兴趣的广播进行注册,当感兴趣的广播发出时,接收器就会接收到广播并且在内部进行逻辑处理。

  • 如何创建一个广播接收器?

    • 创建一个java类,继承自BroadcastReceiver,并重写父类的onReceive方法,在方法内部处理接收到广播后的逻辑。

  • 注册广播的两种方式

    • 在代码中动态注册

      • IntentFilter intentFilter = new IntentFilter();
        //添加想要监听的广播对应的action
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        receiver = new NetWorkChangeReceiver();
        registerReceiver(receiver,intentFilter);
      • @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(receiver);
        }
      • 获取网络状态:

        • ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          ​
          NetworkInfo info = manager.getActiveNetworkInfo();
          if (info != null&& info.isAvailable()){
              Toast.makeText(getApplicationContext(),"net work is Available",Toast.LENGTH_SHORT).show();
          }else {
              Toast.makeText(getApplicationContext(),"net work is unAvailable",Toast.LENGTH_SHORT).show();
          }
      • 优点:可以自由控制广播的注册和注销,灵活性比较大

      • 缺点:必须要程序启动之后才会接收到广播,因为注册的逻辑是写在onCreate里面

    • 在AndroidManifest.xml中静态注册

      • 创建一个类继承BroadcastReceiver,重写receive方法

      • 在AndroidManifest.xml中注册,并添加需要的权限

      • <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
        ...
        <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        ​
        ​
        </receiver>
  • 广播接收器不允许开启线程,当onReceive方法运行了较长时间而没有结束时,程序就会报错,因此,广播接收器扮演的是一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一个服务

  • 发送自定义广播

    • 发送标准广播

      • 创建一个广播接收器。

      • 注册广播接收器并且通过intent-filler指定接收器能够接收什么广播

      • Intent intent = new Intent(“com.example.MY_BRROADCAST”);

        sendBroadcast(intent)

      • 可以通过intent给广播接收器传递一些数据

    • 发送有序广播

      • 将上面的sendBroadcast 改为 sendOrderBroadcast(intent,null)

      • 两个参数,第一个仍然是intent,第二个是和权限相关的字符串,传入null就可以了

      • 注册广播接收器的时候在intent-filter参数中设置优先级 priority = "xx"

      • 接收器中可以通过abortBroadcast方法将广播截断

  • 本地广播

    • 使用LocalBroadcastManager 对广播进行管理

    • getInstance方法获得LocalBroadcastManager实例

    • sendBroadcast(intent) 发送本地广播

    • registerReceiver(localReceiver,intentFilter)注册本地广播

    • unregisterReceiver 注销本地广播

    • 本地广播无法通过静态注册

    • 本地广播比全局广播更高效

  • GIT:

    • 添加代码或者文件

      • git add fileName

    • 添加目录中所有文件

      • git add .

    • 查看当前用户的用户名

      • git config --global user.name

      • git config --global user.email

    • 退出

      • exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值