自定义广播接收器的基本步骤以及动态广播注册

1. 定义一个类继承自BroadcastReceiver
2. 实现其onReceive方法
3. 在onReceive中实现接收到广播后要执行的操作

其中关于广播注册还可以动态注册:

 1  Intent intent;
 2                Receiver01 receiver;
 3             // 动态注册广播,只有在注册后到取消注册之前,能够收到广播。其余时候不能收到广播
 4             // 常驻广播,在清单文件中注册,只有该应用在运行就都能收到广播
 5             IntentFilter filter = new IntentFilter("com.fanhy.register");
 6             /**
 7              * 动态注册广播
 8              * 参数1 BroadcastReceiver receiver        要注册的广播接收器对象
 9              * 参数2 IntentFilter filter                过滤器
10              * 
11              * 动态注册的常用方式:
12              *         在onCreate里进行注册
13              *         在onDestory进行注销
14              * */
15             registerReceiver(receiver, filter);

 

 1 package com.bwf.broadcast;
 2 
 3 import android.content.BroadcastReceiver;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.util.Log;
 7 
 8 public class MyReceiver extends BroadcastReceiver{
 9 
10     @Override
11     public void onReceive(Context context, Intent intent) {
12         String str = intent.getStringExtra("key");
13         Log.d("fanhy", str);
14         
15         // 更新UI的操作
16         MyApp.tv.setText(str);
17     }
18 
19 }

4. 在清单文件中注册广播

 <!-- 声明为远程广播: android:exported="true" -->
       
         <receiver android:name="com.bwf.broadcast.MyReceiver" android:exported="true">
           
         <intent-filter >
                <action android:name="com.fanhy.broadcast01"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.bwf.broadcast.MyReceiver_02" android:exported="true">
            <intent-filter >
                <action android:name="com.fanhy.broadcast01"/>
            </intent-filter>
        </receiver>
    </application>

发送广播的基本步骤
* 1. 创建Intent对象
* 2. 通过类名或者是过滤器的相关属性来指定目标
* 3. 通过sendBroadcast(intent)来发送消息

 1 package com.bwf.broadcast;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.view.Menu;
 7 import android.view.MenuItem;
 8 import android.widget.TextView;
 9 
10 public class MainActivity extends Activity {
11     /**
12      * 自定义广播接收器的基本步骤
13      *         1. 定义一个类继承自BroadcastReceiver
14      *         2. 实现其onReceive方法
15      *         3. 在onReceive中实现接收到广播后要执行的操作
16      *         4. 在清单文件中注册广播
17      * 
18      * 发送广播的基本步骤
19      *         1. 创建Intent对象
20      *         2. 通过类名或者是过滤器的相关属性来指定目标
21      *         3. 通过sendBroadcast(intent)来发送消息
22      * 
23      * */
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity_main);
28         
29         MyApp.tv = (TextView) findViewById(R.id.tv);
30     }
31 
32     @Override
33     public boolean onCreateOptionsMenu(Menu menu) {
34         // Inflate the menu; this adds items to the action bar if it is present.
35         getMenuInflater().inflate(R.menu.main, menu);
36         return true;
37     }
38 
39     @Override
40     public boolean onOptionsItemSelected(MenuItem item) {
41         switch (item.getItemId()) {
42         case R.id.action_send:
43             //Intent intent = new Intent(this, MyReceiver.class);
44             Intent intent = new Intent("com.fanhy.broadcast01");
45             intent.putExtra("key", "更新UI~");
46             sendBroadcast(intent);
47             break;
48 
49         default:
50             break;
51         }
52         return super.onOptionsItemSelected(item);
53     }
54 }

 

posted on 2015-10-13 18:22  敬的男人  阅读(988)  评论(0)    收藏  举报