1.什么是广播
广播是Android四大组件之一;
广播分为发送方和接受方,就算没有接受方,发送方页会发送数据;
广播不仅可以实现跨多个页面的数据通信,还可以实现跨进程的数据通信。
2.广播的分类
无序广播:所有监听的接收者都能收到;(打个比方就是所有听收音机的人都能听到)
有序广播:优先级高的先接收;如果不终止往下传递。(比如广电先审核,在播放广播)
粘滞广播:当广播发出后会一直等到接受者接受为止。
3.启动广播的方式(与广播分类勿混淆)
1.静态注册广播:
新建类继承BroadcastReceiver;
在Android Manifest里注册:
<receiver android:name=".Broad">
<intent-filter>
//自定义Action
<action android:name="MLY" />
</intent-filter>
</receiver>
在context环境发送广播
2.动态注册广播:
新建类继承BroadcastReceiver;
在Activity中动态注册:
receiver = new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("zhifu");
filter.setPriority(100);
registerReceiver(receiver, filter);
4.静态与动态注册无序列表
静态:
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.btn1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("MLY");
sendOrderedBroadcast(intent,null);
}
});
}
}
创建类继承BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "BroadcastReceiver ", Toast.LENGTH_LONG).show();
Log.e("MyReceiver","11111111");
}
}
在Android Manifest:
<receiver android:name=".MyReceiver ">
<intent-filter>
//自定义Action
<action android:name="MLY" />
</intent-filter>
</receiver>
2.动态:
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.btn1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("zhifu");
sendOrderedBroadcast(intent,null);
}
});
}
}
创建类继承BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver", Toast.LENGTH_LONG).show();
Log.e("MyReceiver","11111111");
}
}
另一个Poject中的Activity:
package com.example.mod;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private MyReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("zhifu");
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
5.静态与动态注册有序广播
1.静态注册有序广播:
在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.btn1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("MLY");
sendOrderedBroadcast(intent,null);
}
});
}
}
在接受项目中创建两个类继承BroadcastReceiver,并且可以在类中判断是否要继续广播下去
如果不就执行abortBroadcast
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver", Toast.LENGTH_LONG).show();
Log.e("MyReceiver","11111111");
}
}
public class MyyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "receiver", Toast.LENGTH_SHORT).show();
Log.e("MyReceiver","22222222");
}
}
关键点:分别在注册时进行优先级判断:
<receiver android:name=".MyReceiver ">
//设置优先级-1000~1000
<intent-filter android:priority="1000">
//自定义Action
<action android:name="MLY" />
</intent-filter>
</receiver>
<receiver android:name=".MyyReceiver ">
//设置优先级-1000~1000
<intent-filter android:priority="100">
//自定义Action
<action android:name="MLY" />
</intent-filter>
</receiver>
2.动态注册有序广播:
在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.btn1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("zhifu");
sendOrderedBroadcast(intent,null);
}
});
}
}
在接受项目中创建两个类继承BroadcastReceiver,并且可以在类中判断是否要继续广播下去
如果不就执行abortBroadcast
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "别挣扎了,hhh", Toast.LENGTH_LONG).show();
Log.e("MyReceiver","11111111");
}
}
public class MyyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "receiver", Toast.LENGTH_SHORT).show();
Log.e("MyReceiver","22222222");
}
}
在令一个project中Activity动态注册:
使用 filter.setPriority(100)设置优先级;
public class MainActivity extends AppCompatActivity {
private MyReceiver receiver;
private MyyReceiver receiver2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("zhifu");
filter.setPriority(100);
registerReceiver(receiver, filter);
receiver2 =new MyyReceiver();
IntentFilter filter1=new IntentFilter();
filter1.addAction("zhifu");
filter1.setPriority(1000);
registerReceiver(receiver2, filter1);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
unregisterReceiver(receiver2);
}
}