网站首页 极客学院 视频课堂 极客论坛 下载专区 行业新闻 欢迎光临极客研究院,今天是2019-08-24 星期六
会员面板
帐号:
密码:
验证码:
极客学院
教程搜索
输入要搜索的内容:

下载专区
精品教程
   网站首页 > 移动开发 > Android开发教程 > Android广播发送和接收入门实例

Android广播发送和接收入门实例

Android的广播分系统广播和自定义广播。
系统广播是指Android操作系统在某些条件的触发下,发送系统广播,系统广播是所有在后台或前台运行APP进程都能接收到的。
常见的系统广播有:
1.系统重启完成
2.wifi刚连上或断开时,操作系统会发送广播通知,运行中的APP就知现在wifi连上或断开了
3.电池电量不足
4.接收到短信或来电
自定义广播就是指APP自己发送出的消息。可以在不同的activity中通知,


在一个Activity里要进行broadcast
自定义广播的接收分静态注册和动态注册两种
静态注册是指在Manifest里面注册声明接收的类,那么接收的功能就在整个APP生命期都有效

先来个动态注册广播的实例

本例是在onResume中注册和创建广播接收的对象,在onPause时销毁这个对象,即只有在当前avtivity显示时才接收广播,隐藏时不接收(隐藏时广播接收对象已被销毁)

protected void onResume()
 {
        super.onResume();
        // 动态注册广播
        IntentFilter filter = new IntentFilter();   //创建一个过滤器对象
        filter.addAction("Gavin_broadcast");    //广播的名称
        this.broadcastReceiver = new M_receiver();    //这是后面定义的广播接收类(内部类)
        this.registerReceiver(this.broadcastReceiver, filter);
        Toast.makeText(this,"广播注册完成",Toast.LENGTH_SHORT).show();
 }

  @Override
    protected void onPause() {
        super.onPause();
        //销毁在onResume()方法中的广播
        unregisterReceiver(this.broadcastReceiver);
    }

//自定义一个内部类,负责接收广播
 public   class  M_receiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent) {
            String sname=intent.getStringExtra("sname");
            MainActivity.this.tv.setText(sname);   //把接收到的内容显示到UI
        }
    }


public   void open_new(View v)
    {
        Intent intent = new Intent("Gavin_broadcast");
        intent.putExtra("sname","Mike");
    //如果是静态注册接收广播,android 8.0以后intent还要用setComponent指定接收的类,动态注册不用
        //intent.setComponent(new ComponentName("com.example.myapplication","com.example.myapplication.MainActivity$M_receiver"));
        this.sendBroadcast(intent);
        Toast.makeText(this,"发送广播",Toast.LENGTH_SHORT).show();
    }

-----------------------------------------------------------------------------

教程原创:王颂元   www.kimgeek.com

如果是使用静态注册的方法,可以利用android studio的新建>other > BroadcastReceiver , 会自动帮你创建好BroadcastReceiver类(独立的类,不是内部类)和mainifest的代码。
你只需写好这个新类的onReceiver即可。
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String sname=intent.getStringExtra("sname");
        Toast.makeText(context,"接收到自定义的广播"+sname,Toast.LENGTH_SHORT).show();
    }
}

一般需要接收后更新UI的,都用动态注册,建立内部类来负责接收。 因为一个独立的类需要更新Activity的UI的话实现起来比较麻烦



  相关文章
本文标题:Android广播发送和接收入门实例
对本文有疑问?现在就进入论坛提问>>
 
粤ICP备18090445号