一、自定义广播
1、继承于广播接收器
新建一个类,继承于BroadcastReceiver,并且重写onReceive()方法,在此方法里实现自己的业务逻辑
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("MyBroadcastReceiver", "onReceive: 接收到自定义广播");
}
}
2、AndroidManifest注册
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.androidpractice20_orderedbroadcast">
<application
......
<receiver
android:name=".MyBroadcastReceiver" //注意类名
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.ice.android.MYBROADCAST"/> //自定义一个广播名字,方便调用
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
......
</activity>
</application>
</manifest>
3、发送自定义的广播
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这里传入AndroidManifest自定义的action名
Intent intent = new Intent("com.ice.android.MYBROADCAST");
sendBroadcast(intent);//发送广播
}
}
此时运行程序,应该就能收到自定义的广播了
二、有序广播
上面的自定义广播发送的仍是标准广播,是无序的,而有序广播是按优先级传播的,可以随时被截断。在上面的代码基础上我们将其修改成有序广播
1、设置优先级
打开AndroidManifest修改,在<intent-filter>标签添加一个priority并属性设置一个值,取值范围是-1000~10000,值越大的广播接收器(包括其他独立APP)越先接收到
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.androidpractice20_orderedbroadcast">
<application
......
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100"> //设置优先级-1000~10000,值越大越先接收
<action android:name="com.ice.android.MYBROADCAST"/>
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
.......
</activity>
</application>
</manifest>
2、发送广播
其实就是将sendBroadcast()改为sendOrderedBroadcast()就行
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// //发送自定义的标准广播
// Intent intent = new Intent("com.ice.android.MYBROADCAST");
// sendBroadcast(intent);
//发送自定义的有序广播
Intent intent = new Intent("com.ice.android.MYBROADCAST");
sendOrderedBroadcast(intent,null);//第二个参数是receivePermission
}
}
3、截断广播
当一个接收器接收到该有序广播,若不想让广播继续传送,可以将其截断
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("MyBroadcastReceiver", "onReceive: 接收到自定义广播");
abortBroadcast();//截断广播
}
}