一、知识介绍
1、【广播分类】
①有序广播:接收者A收到广播传递给B,B传给C,有序传递。任何一个环节都可以终止广播,也可以修改广播中携带的数据。
发送的方式:sendOrderedBroadcast(intent,receiverPermission);
【提示】①第二个参数是设置发送的权限,这里可以设为null
②接收有序广播是需要在intent-flter中设置priority,值越大则先执行,相同则按照注册顺序
②无序广播:一个广播发送者,向所有接收者同时发送广播,也就是ABC接收者都同时响应。
发送方式:sendBroadcast(intent)
2、【广播接收者】按是否常驻分类
①常驻型广播接收者:在androidManifest.xml中注册,只要应用程序没有被卸载就持续存在。
②非常驻型广播接收者:在java代码中注册,一般随Activity或者Service组件产生而产生,随他们销毁而销毁。生命周期比较短。使用的方法是registerReceiver(参数1:广播接收者实例,参数2:频道(意图过滤器));unregisterReceiver(广播接收者实例)
二、项目一【发送广播】
【步骤】
①定义一个广播接收者,自定义添加intent-fliter中的action name
②添加按钮,点击事件
③定义intent,设置action,发送广播
【项目结构】
【MyReceiver】
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class MyReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
}
}
【AndroidManifest.xml】
<receiver
android:name=".receiver.MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.MyApplication2.myreceiver" />
</intent-filter>
</receiver>
【activity_main.xml】
<Button
android:id="@+id/btn"
android:text="发送广播"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
【MainActivity】
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class MainActivity extends AppCompatActivity { Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("com.example.MyApplication2.myreceiver");
sendBroadcast(intent);
}
}); }
}
【提示】发送广播intent设置的action要和广播接受者设置的action相同,这样广播接收者才能收到发送的广播
【效果】点击
二、项目二【发送有序广播】
【步骤】
①定义三个广播接收者,观察顺序
②添加按钮点击
③设置intent,发送有序广播
【项目结构】
【定义三个广播接收者并注册】
<receiver
android:name=".receiver.MyOrderReceiver1"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="com.example.MyApplication2.myreceiver" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.MyOrderReceiver2"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="com.example.MyApplication2.myreceiver" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.MyOrderReceiver3"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="10">
<action android:name="com.example.MyApplication2.myreceiver" />
</intent-filter>
</receiver>
【提示】设置priority为不同的值,action name为相同的,接收同一个广播
【MainActivity】
btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("com.example.MyApplication2.myreceiver");
sendOrderedBroadcast(intent,null);
}
});
【效果】
点击按钮执行顺序