您的位置:首页 > 其它

广播(动、静态注册无序、有序广播)

2018-03-26 22:02 274 查看

广播定义

(1) 广播是Android四大组件之一,全称BroadcastReceiver

(2) 广播分为发送方和接收方,就算没有接收方,发送方也会发送数据

(3) 广播可以实现跨多个页面的数据通信

(4) 广播可以实现跨进程间的数据通信

静态注册广播(常驻型广播)

在Androidmanifest中注册的广播(静态注册)属于常驻型广播,即使当前应用程序结束了,广播还处于监听状态,一旦有发送者发了对应的广播,其还是会被激活

静态注册无序广播使用步骤

(1)新建类继承BroadcastReceiver

(2)实现onReceive抽象方法【由于BroadcastReceiver是一个抽象类,定义了一个onReceive】

(3)在AndroidManifest中注册BroadcastReceiver,结构如下:

<receiver android:name="">

<intent-filter>

<action android:name=""/>

</intent-filter>

</receiver>


(4)在有Context环境通过sendBroadcast发送广播

代码展示

step1:在布局中添加一个按钮,定义控件、绑定ID、设置监听事件

step2:设置发送频道,发送广播

step3:在AndroidManifest中注册

Activity文件
//发送方
public class MainActivity extends AppCompatActivity {

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = findViewById(R.id.main_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播,引号中的是频道号
Intent intent = new Intent("zhifubao");
sendBroadcast(intent);
}
});
}
}


public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"微信",Toast.LENGTH_SHORT).show();
}
}


//静态注册(无序广播)在AndroidManifest中注册的代码
<receiver android:name=".MyReceiver">
<intent-filter
<action android:name="zhifubao"/>
</intent-filter>
</receiver>




有序广播

有序广播中的“有序”是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。

静态注册有序广播使用步骤

(1)新建类继承BroadcastReceiver

(2)实现onReceive抽象方法【由于BroadcastReceiver是一个抽象类,定义了一个onReceive】

(3)在AndroidManifest中注册BroadcastReceiver,结构如下:

<receiver android:name="">

<intent-filter android:priority="">

<action android:name=""/>

</intent-filter>

</receiver>


(4)在有Context环境通过sendBroadcast发送广播

代码展示

//发送方代码
public class MainActivity extends AppCompatActivity {
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = findViewById(R.id.main_btn);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播,引号中的是频道号
Intent intent = new Intent("zhifubao");
sendOrderedBroadcast(intent, null);//安卓中自定义权限
}
});
}
}


动态注册广播(非常驻型广播)

动态注册广播是通过代码注册广播接收者的一种形式。代码注册时可以将广播接收者作为一个内部类写在Activity中,也可以重新写一个类继承自BroadCastReceiver,需要用代码注册

动态注册广播会受Activity的生命周期的影响, 当Activity销毁的时候,广播就失效了。

动态注册无序广播使用步骤

(1)新建类继承BroadcastReceiver

(2)实现onReceive抽象方法

(3)在代码中实例化广播类

(4)在代码中实例化IntentFilter

(5)调用IntentFilter对象的addAction方法设置频道号

(6)在有Context坏境中调用registerReceiver注册广播

(7)在有Context坏境中通过sendBroadcast发送广播

(8)在有Context坏境中调用unregisterReceiver注销广播

代码展示

//接收方代码
public class MainActivity extends AppCompatActivity {

private MyReceiver myReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("zhifubao");
//动态注册(无序)广播接收器
registerReceiver(myReceiver,intentFilter);
}

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

}
}


动态注册有序广播

(1)新建类继承BroadcastReceiver

(2)实现onReceive抽象方法

(3)在代码中实例化广播类

(4)在代码中实例化IntentFilter

(5)调用IntentFilter对象的addAction方法设置频道号

(6)调用IntentFilter对象的priority方法设置优先级

(7)在有Context坏境中调用registerReceiver注册广播

(8)在有Context坏境中通过sendBroadcast发送广播

(9) 在有Context坏境中调用unregisterReceiver注销广播

代码展示

public class MainActivity extends AppCompatActivity {

private IntentFilter intentFilter;
private MyBroadcastReceiver myBroadcastReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建intentFilter对象,用于添加action
intentFilter = new IntentFilter();
intentFilter.addAction("zhifubao");
//设置优先级
intentFilter.setPriority(1000);
//创建MyBroadcastReceiver的对象
myBroadcastReceiver = new MyBroadcastReceiver();
//注册广播
registerReceiver(myBroadcastReceiver, intentFilter);

}

@Override
protected void onDestroy() {
super.onDestroy();
//注销注册
unregisterReceiver(myBroadcastReceiver);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: