Android广播机制
来源:互联网 发布:linux 文本编辑器 编辑:程序博客网 时间:2024/06/10 03:12
1.Android广播机制概述
Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。
2.广播接收者
广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写:
public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据;
class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { unregisterReceiver(this); } }
启动广播:
Intent intent = new Intent(us.mifeng);sendBroadcast(intent);finish();
静态注册:
直接在AndroidManifest.xml文件中进行注册。规则如下:
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="us.mifeng"/> </intent-filter> </receiver>
动态注册:
动态注册时,无须在AndroidManifest中注册组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:
//注册广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(us.mifeng); registerReceiver(new MyReceiver(),intentFilter);
无序广播:
(1)广播发送者:
public class MainActivity extends Activity { private Button button; private OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.xiazdong"); intent.putExtra("name", "xiazdong"); MainActivity.this.sendBroadcast(intent); Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)this.findViewById(R.id.button); button.setOnClickListener(listener); } }
(2)广播接收者
public class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String name = intent.getExtras().getString("name"); Log.i("Recevier1", "接收到:"+name); } }
AndroidManifest.xml
<receiver android:name=".Receiver"> <intent-filter> <action android:name="com.xiazdong"/> </intent-filter> </receiver>
有序广播
(1)广播发送者
public class MainActivity extends Activity { private Button button; private OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.xiazdong"); intent.putExtra("name", "xiazdong"); MainActivity.this.sendOrderedBroadcast(intent, null); //有序广播发送 Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)this.findViewById(R.id.button); button.setOnClickListener(listener); } }
(2)广播接收者
public class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String name = intent.getExtras().getString("name"); Log.i("Recevier1", "接收到:"+name); abortBroadcast(); //Receiver1接收到广播后中断广播 } }
AndroidManifest.xml
[html] view plain copy
<receiver android:name=".Receiver"> <intent-filter android:priority="1000"> <!-- 设置最高优先级 --> <action android:name="com.xiazdong"/> </intent-filter> </receiver>
0 0
- [Android]Android广播机制
- android 广播机制
- Android--广播机制
- Android 广播机制
- android 广播机制
- Android 广播机制 详解
- Android广播机制
- android 广播机制
- android 广播机制
- android广播机制
- Android 中的广播机制
- Android广播机制
- android 广播机制
- Android 广播事件机制
- Android学习--广播机制
- Android的广播机制
- 图解 Android 广播机制
- Android 广播机制
- group_concat用运 属于同一组统计
- 密码学-RSA算法
- Linux命令行与shell脚本(5)--分区和挂载
- LintCode 41 最大子数组
- 开发一款可以点击头像图片打电话的安卓软件
- Android广播机制
- Android面试题-与性能优化相关面试题六
- 机器学习基石2-4 Non-Separable Data
- 深度学习网址学习
- Recyclerview 嵌套Recyclerview
- PHP CURL 与 java http
- UILabel和UITextView 设置描边阴影了下划线了
- hdu 2121 Ice_cream’s world II(无定根的最小树形图)
- PHP 无法开启 OCI8 扩展原因