广播接收者
BroadCastReceiver是广播接收者 安卓四大组件之一
作用:用于传数据(同一个App多个组件中或者不同APP中)
用法:
广播发送者 : 发送广播
广播接收者(调频): 用于接收广播
要处理的事情 :处理广播的相关信息, Intent有图对象
分类:
静态注册 动态注册
静态注册的广播接收者
在清单文件中添加(本APP中的类都可以获得值)
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="com.wuyanzu"/>
</intent-filter>
</receiver>
.
同一APP
public class MainActivity extends AppCompatActivity {
//这里的com.wuyanzu是清单文件里面定义的调频
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start();
}
public void start(){
//这里的com.wuyanzu是清单文件里面定义的调频
Intent intent=new Intent("com.wuyanzu");
intent.putExtra("name","吴彦祖");
//sendBroadcast是用来给广播接收者发数据的
sendBroadcast(intent);
}
}
//重写BroadcastReceiver 重写方法onReceive
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("com.wuyanzu")){
String name = intent.getStringExtra("name");
Log.e("###", "onReceive: "+name);
}
}
}
不同APP
public void normal_dialog() {
//TODO 1:构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//TODO 2:设置属性
builder.setTitle("这是一个普通对话框");
builder.setIcon(R.drawable.ic_launcher_background);
builder.setMessage("我是普通对话框的普通语句");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了确认按钮", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了取消按钮", Toast.LENGTH_SHORT).show();
}
});
//主要是这句话!!!!!!!!!!!!!!!!!调用了这个方法就会把消息封装sendBroadcast发送给广播接收者 这是不同APP
Intent intent =new Intent("com.wuyanzu");
intent.putExtra("name","我点击了普通话给对话框");
sendBroadcast(intent);
//TODO 3:使用建造者创建对话框
// builder.setCancelable(false);
AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(false);
//TODO 4:显示
alertDialog.show();
}
动态注册
动态注册不用在清单文件中进行添加receiver用于给指定的发消息
public class MainActivity extends AppCompatActivity {
MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start();
}
//需要new 继承BroadcastReceiver类 用来注册广播
public void start(){
myReceiver = new MyReceiver();
registerReceiver(myReceiver,new IntentFilter("com.wuyanzu"));
}
//需要页面关闭的时候解除注册
@Override
protected void onDestroy() {
super.onDestroy();
//解除绑定
unregisterReceiver(myReceiver);
}
}
public void dianji(View view) {
Intent intent=new Intent();
intent.setAction("com.wuyanzu");
Bundle bundle=new Bundle();
bundle.putString("msg","我是吴彦祖");
intent.putExtras(bundle);
sendBroadcast(intent);
}
//继续输出接收的数据
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("baiwei.wuyanzu")){
String name = intent.getStringExtra("name");
Log.e("###", "onReceive: "+name);
}
}
}