广播

广播

广播作为安卓四大组件之一,具有很大的作用,总结了一下广播的使用方法,希望能够帮助到一些人

1.广播概念
系统提供,应用程序之间信息传递的机制

2.原理
数据发送源发送广播(按照特定的频率(action)),广播接收方可以是多个,但是要保证接收方,接收的频率(action)和发送方一
intent-filter–设置频率(action)

3.用途
意图过滤器作用Intetnt-Filter–>
告诉系统我能够处理哪些事情
1>接收系统广播 安卓系统不停往外发送广播
比如电量.wifi状态…
2>接收应用程序组件之间广播
界面–服务
界面–界面
服务–服务

4.适用场景
广播获取消息后,应用场景
UI更新
handler–ui更新


5.学习广播基本步骤
广播对象的创建
1>创建广播类对象对象继承BroadcastReceiver
2>要求重写onReceive{
}

广播注册分为静态注册和动图注册两种方式

1静态注册
在主配置文件添加 <receiver> 节点
<intent-filter>–意图过滤器表明我能够处理的广播
特点:常驻型广播(活一次,永久活着,Activity销毁,还能接收广播)
测试–>系统广播的接收飞行模式测试

创建FirstBroadCast类继承BroadcastReceiver,代码如下

package com.tedu.broad;

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

public class FirstBroadCast extends BroadcastReceiver{

    @Override  //接收广播数据,并对数据做出处理
    public void onReceive(
            Context context,//上下文对象
            Intent intent//意图对象(数据,频率(action))
            ) {
        //注意:不能阻止该方法超过10s---ANR
        //耗时操作不能做-网络访问,数据库获取数据
        //测试wifi状态的改变
        Toast.makeText(context, "飞行模式状态改变", Toast.LENGTH_SHORT).show();

    }

}

MainAcitivity代码如下

package com.tedu.broad;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

AndroidManifest.xml文件中配置如下

<receiver android:name="com.tedu.broad.FirstBroadCast">
            <intent-filter >
                <action android:name="android.net.wifi.STATE_CHANGE"/>
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
                <action
                <!-- 飞行模式Action --> android:name="android.intent.action.AIRPLANE_MODE"/>
                </intent-filter>
        </receiver>

2> 动态注册广播
创建在activity目录下注册位置
activity生命周期的oncreat()
注册的方法
registerReceiver(
innerReceiver–>广播对象
, filter—>过滤器
);
注意动态注册广播要在activity生命周期结束之后解除注册
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(解除注册的广播对象);
}
动态广播如果不解除注册在给报异常

MainActivity代码如下

package com.tedu.broad;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
    //声明一个类内的广播
    private InnerBroadCast innerReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册过程
        //广播初始化
        innerReceiver=new InnerBroadCast();
        //调用注册方法注册
        //intent-filter设置
        IntentFilter filter=new IntentFilter();
        filter.addAction("com.tedu.broad_INNER");//告诉系统我能处理声明广播
        registerReceiver(innerReceiver, filter);

    }
    @Override
    protected void onDestroy() {
        //将广播解除注册
        unregisterReceiver(innerReceiver);
        super.onDestroy();
    }


    /**
     * @author pjy
     * 类内创建的一个广播
     *
     */
    class InnerBroadCast extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Toast.makeText(context, "InnerReciver反馈", Toast.LENGTH_SHORT).show();
        }

    }
 /**
 * @param v
 * 用于处理单击按钮对广播进行发送
 * 
 */

public void doClick(View v){
    switch (v.getId()) {
    case R.id.main_send_btn:
        Intent intent=new Intent("com.tedu.broad_INNER");
        //发送广播方法
        sendBroadcast(intent);
        break;
    }
 }

}

通过广播传递数据


发送数据
借助intent putExtra(“key”,value);

获得数据
get…Extra(“key”);

广播的分类

无序广播
特点:只要注册相应频率(action)任何广播接收器都可以接收

有序的广播
特点:传递有顺序,先接收广播的可以将广播中断,通过abortBroadcast()方法来中断广播,后序接受者收不到消息
注意如果无序广播调用这个方法出现异常

接收的信息进行修改
setResult..();

获取接收到的信息
getResult..();

广播的优先级:
1> 如果没有设置任何优先条件的话.
在主配置文件里边谁先注册的谁先接收消息
2>人为干涉优先级
优先级所在位置 intent-filter标签里有属性

 <intent-filter 
   android:priority=""
   >
 priority="整型变量"
 优先数值大会优先接收

3>匹配action(频道)相同又没有优先级设置的话,动态广播先于静态广播接收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值