zoukankan      html  css  js  c++  java
  • Android 之 BroadcaseReceiver

    1.在AndroidManifest.xml中注册

    <receiver android:name=".MyReceiver">
                <intent-filter >
                    <action android:name="myaction"/>
                </intent-filter>
            </receiver>

    2.在Activity中注册

    MyReceiver receiver = new MyReceiver();
    IntentFilter filter = new IntentFilter();
    filter.addAction("myaction");
    registerReceiver(receiver, filter);

    两种注册BroadcastReceiver方法的比较:
    现在我们了解了两种注册BroadcastReceiver的方法之后,需要考虑一下这两种方法适用的场合:

        i. 第一种注册的方法可以保证在应用程序安装之后,BroadcastReceiver始终处于活动状态,通常用于监听系统状态的改变,比如说手机的电量,wifi网卡的状态(当然,监视这些东西也是取决于软件的需求)。对于这样的BroadcastReceiver,通常是在产生某个特定的系统事件之后,进行相应的操作,比如说wifi网卡打开时,给用户一个提示;

        ii. 第二种注册方法相对第一种要灵活的多,这样注册的BroadcastReceiver通常用于更新UI的状态。一般来说,都是在一个Activity启动的时候使用这样的方法注册BroadcastReceiver,一旦接收到广播的事件,就可以在onReceive方法当中更新当前的这个Activity当中的控件。但是需要注意的是如果这个Activity不可见了,就应该调用unregisterReceiver方法来解除注册;

     

    函数:

    i. registerReceiver(receiver,filter);
    这个函数的作用就是将一个BroadcastReceiver注册到应用程序当中,这个函数接收两个参数,第一个参数是需要注册的BroadcastReceiver对象,第二个是一个IntentFilter。第一个参数是非常容易理解的,第二个参数的作用是定义了哪些Intent才能触发这个注册的BroadcastReceiver对象。类似于前面所讲解的
    <intent-filter>标签的作用;

    ii. unregisterReceiver(receiver);
    这个方法就非常的简单了,用于解除BroadcastReceiver的绑定状态。一旦解除完成,响应的BroadcastReceiver就不会再接收系统所广播的Intent了。

     

    下面是源代码Demo:

    Acitivity:

    package com.example.broadcast;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
        
        Button mybt;
        Intent intent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mybt = (Button)findViewById(R.id.mybt);
            mybt.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    
                    /*注册BroadcastReceiver有两种方式:
                    一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。
                    另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,
                    如果取消时就调用 Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,
                    BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)*/
    //                MyReceiver receiver = new MyReceiver();
    //                IntentFilter filter = new IntentFilter();
    //                filter.addAction("myaction");
    //                registerReceiver(receiver, filter);
                    //创建Intent对象
                    intent = new Intent();
                    //设置Intent的Action属性
                    intent.setAction("myaction");
                    //加入信息
                    intent.putExtra("msg", "普通广播");
                    //传送信息
                    sendBroadcast(intent);
                    
                    
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    
    }

    BroadcastReceiver:

    package com.example.broadcast;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class MyReceiver extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Toast.makeText(context,"Action is:"+intent.getAction()
                    +"
     msg is:"+intent.getStringExtra("msg") , Toast.LENGTH_LONG)
                    .show();
        }
    
    }

    Service发送广播:

    Intent intent = new Intent();  
    intent.setAction("com.he.chat.receiveNewMessage");//创建过滤条件  
    intent.putExtra("key", "newMessage");//传递参数  
    intent.putExtra("sender", msg.getSender());//传递参数  
    sendBroadcast(intent);

    Manifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.broadcast"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <receiver android:name=".MyReceiver">
                <intent-filter >
                    <action android:name="myaction"/>
                </intent-filter>
            </receiver>
            <activity
                android:name="com.example.broadcast.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
  • 相关阅读:
    jquery拖拽插件 tableDnD
    爱回收jd图标
    struts2框架学习笔记2:配置详解
    struts2框架学习笔记1:搭建测试
    hibernate框架学习笔记12:查询优化
    hibernate框架学习笔记11:Criteria查询详解
    hibernate框架学习笔记10:HQL查询详解
    hibernate框架学习笔记9:多对多关系案例
    hibernate框架学习笔记8:一对多关系案例
    hibernate框架学习笔记7:HQL查询、Criteria查询简介
  • 原文地址:https://www.cnblogs.com/hzm112567/p/3718146.html
Copyright © 2011-2022 走看看