您的位置:首页 > 移动开发 > Android开发

Android 广播

2015-08-07 17:48 441 查看

Android 广播

1.系统全局广播

接收广播

动态接收

基本步骤:

1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)

2. 实例化IntentFilter,添加对应action

3. 注册接收器registerReceiver()

4. 取消注册

public class MainActivity extends Activity {
private MyBroadcastReceiver myBroadcastReceiver;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.INPUT_METHOD_CHANGED");//切换输入法时的系统广播
myBroadcastReceiver = new MyBroadcastReceiver();
registerReceiver(myBroadcastReceiver, intentFilter);

class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"MyBroadcastReceiver.active.net change", Toast.LENGTH_SHORT).show();
//这里只是弹出了一个toast,可进行其他处理如打开一个activity
}

}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcastReceiver);
}
}


静态接收

基本步骤:

1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理),非内部类

2. 在manifest文件中添加一个标签receiver,并添加子标签intent-filter,action

//MyBroadcastReceiver.class
public class MyBroadcastReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.toString() + "MyBroadcastReceiver.static", Toast.LENGTH_LONG).show();
//这里只是弹出了一个toast,可进行其他处理如打开一个activity
}

}
//manifest
<receiver android:name=".MyBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>


发送广播

标准广播

Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出

发送广播,sendBroadcast()

Intent intent = new Intent("example.broadcasttest.MYBROADCAST");
intent.putExtra("name", "Tom");
sendBroadcast(intent);


接收次广播的action为

intentFilter.addAction("example.broadcasttest.MYBROADCAST");


有序广播

和标准广播就一个区别,就使用sendOrderBroadcast()发送

2.本地广播

发送广播

Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出

获得LocalBroadcastManager实例

发送广播,localBroadcastManager.sendBroadcast()

localBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("example.broadcasttest.MYBROADCAST");
intent.putExtra("name", "Tom");
localBroadcastManager.sendBroadcast(intent);


接收广播

只有动态接收

基本步骤:

1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)

2. 实例化IntentFilter,添加对应action

3. 获得LocalBroadcastManager实例

4. 注册接收器localBroadcastManager.registerReceiver()

5. 取消注册localBroadcastManager.unregisterReceiver();

public class MainActivity extends Activity {
private MyBroadcastReceiver myBroadcastReceiver;
private IntentFilter intentFilter;
private LocalBroadcastManager localBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

intentFilter = new IntentFilter();
intentFilter.addAction("example.broadcasttest.MYBROADCAST");
myBroadcastReceiver = new MyBroadcastReceiver();
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(myBroadcastReceiver , intentFilter);
class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String name = intent.getStringExtra("name");//接收extra数据
Toast.makeText(context, "MyBroadcastReceiver.active", Toast.LENGTH_SHORT).show();
}

}
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localMyBroadcastReceiver);//取消注册
}
}


3.本地广播和全局广播

发送全局广播:所有应用都能接收到

发送本地广播:只有本应用内可以接收

本地广播更安全,在没有必要的情况下最好发本地广播

另外,本地广播接收器只接受本地广播,本地广播也只能被本地广播接收器接收,如下面关系

本地广播------>本地广播
-------------------------------------------
全局广播------>全局广播


4.标准广播和有序广播

标准广播:所有接收器几乎同时收到广播,无法被截断,效率高

有序广播:按优先级顺序一个一个接收,当一个广播逻辑处理完才会往下传,可被截断。

5.静态接收和动态接收

动态接收:只能在程序启动后接收广播

静态接收:未启动也能接收,所以要实现开机自启自能静态注册
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息