自定义广播接收器的基本步骤以及动态广播注册
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 }
浙公网安备 33010602011771号