广播一般情况下用来监听手机内部的状态的,也可以有消息推送。
广播有两种注册方式:
一种是静态注册(常驻型广播),特点:当APP运行时,广播就已经存在了,即使是退出应用,广播依然存在。通过清单文件的方式注册。
一种是动态注册,特点:当你点击某个事件时,广播才会生成,并且当APP退出时,广播则死亡。但是,在广播死亡之前,你要手动注销掉广播。通过java代码的方式注册。
在隐式意图中,意图过滤器下的action的name="包名.action.intent.类名"(约定格式)
广播分几种?
分两种,普通广播:当有多个广播存在时,接受消息时没有固定顺序。如果为静态注册,则通过清单文件的方式依次向下接受。
有序广播:它是根据属性值,整形的,数值越大,优先级越高,数值越小,优先级越低。
intent—filter:意图过滤器
静态注册广播步骤:
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在清单文件中,添加<receiver>标签,<intent-filter>,<action>
3.在主类中通过隐式意图发送广播,sendBroadCast(intent)
4.在广播中接受intent的值
MainActivity.java
Intent intent = new Intent(getApplicationContext(),MyDynamicReceive.class);
intent.setAction(MyDynamicReceive.ACTION);
intent.putExtra("static", "我发送了一条静态消息");
sendBroadcast(intent);
MyDynamicReceive.java
public class MyDynamicReceive extends BroadcastReceiver {
public static final String ACTION = "com.zhiyuan3g.mybroadcast.receiver.action.intent.MyDynamicReceive";
@Override
public void onReceive(Context context, Intent intent) {
String aStatic = intent.getStringExtra("static");
Log.d("=====TAG=====", "onReceive:"+aStatic);
System.exit(0);
}
}
AndroidManifest.xml
<receiver
android:name=".receiver.MyDynamicReceive"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name=".MyDynamicReceive.ACTION"/>
</intent-filter>
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在自定义类中,添加一个静态常量ACTION
3.在主类中通过按钮实现注册,调用registerReceiver方法(你要实现的广播类,意图过滤器)
4.发送广播,sendBroadCast(intent)
5.在onDestroy方法中,销毁广播unregisterReceiver,记住要加判断,如果为空,则销毁。
注:不需要配置清单文件了,是动态创建的
MainActivity.java
private MyMoveReceiver mMyMoveReceiver;
if (mMyMoveReceiver == null) {
mMyMoveReceiver = new MyMoveReceiver();
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyMoveReceiver.ACTION);
registerReceiver(mMyMoveReceiver, intentFilter);
Intent intent1 = new Intent();
intent1.setAction(MyMoveReceiver.ACTION);
sendBroadcast(intent1);
MyMoveReceiver.java
public class MyMoveReceiver extends BroadcastReceiver {
public static final String ACTION = "com.zhiyuan3g.mybroadcast.action.intent.MyMoveReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d("=====TAG=====", "onReceive:我是动态创建");
}
有序广播,是通过priority(intent—filter标签下的一个属性)来区分的,跟你的清单文件的顺序没有任何关系,并且发送广播的时候不是通过sendBroadCast发送的,而是通过sendOrderedBroadCast发送。priority的值越大,则这个广播的优先级越高。
广播有两种注册方式:
一种是静态注册(常驻型广播),特点:当APP运行时,广播就已经存在了,即使是退出应用,广播依然存在。通过清单文件的方式注册。
一种是动态注册,特点:当你点击某个事件时,广播才会生成,并且当APP退出时,广播则死亡。但是,在广播死亡之前,你要手动注销掉广播。通过java代码的方式注册。
在隐式意图中,意图过滤器下的action的name="包名.action.intent.类名"(约定格式)
广播分几种?
分两种,普通广播:当有多个广播存在时,接受消息时没有固定顺序。如果为静态注册,则通过清单文件的方式依次向下接受。
有序广播:它是根据属性值,整形的,数值越大,优先级越高,数值越小,优先级越低。
intent—filter:意图过滤器
静态注册广播步骤:
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在清单文件中,添加<receiver>标签,<intent-filter>,<action>
3.在主类中通过隐式意图发送广播,sendBroadCast(intent)
4.在广播中接受intent的值
MainActivity.java
Intent intent = new Intent(getApplicationContext(),MyDynamicReceive.class);
intent.setAction(MyDynamicReceive.ACTION);
intent.putExtra("static", "我发送了一条静态消息");
sendBroadcast(intent);
MyDynamicReceive.java
public class MyDynamicReceive extends BroadcastReceiver {
public static final String ACTION = "com.zhiyuan3g.mybroadcast.receiver.action.intent.MyDynamicReceive";
@Override
public void onReceive(Context context, Intent intent) {
String aStatic = intent.getStringExtra("static");
Log.d("=====TAG=====", "onReceive:"+aStatic);
System.exit(0);
}
}
AndroidManifest.xml
<receiver
android:name=".receiver.MyDynamicReceive"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name=".MyDynamicReceive.ACTION"/>
</intent-filter>
</receiver>
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在自定义类中,添加一个静态常量ACTION
3.在主类中通过按钮实现注册,调用registerReceiver方法(你要实现的广播类,意图过滤器)
4.发送广播,sendBroadCast(intent)
5.在onDestroy方法中,销毁广播unregisterReceiver,记住要加判断,如果为空,则销毁。
注:不需要配置清单文件了,是动态创建的
MainActivity.java
private MyMoveReceiver mMyMoveReceiver;
if (mMyMoveReceiver == null) {
mMyMoveReceiver = new MyMoveReceiver();
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyMoveReceiver.ACTION);
registerReceiver(mMyMoveReceiver, intentFilter);
Intent intent1 = new Intent();
intent1.setAction(MyMoveReceiver.ACTION);
sendBroadcast(intent1);
MyMoveReceiver.java
public class MyMoveReceiver extends BroadcastReceiver {
public static final String ACTION = "com.zhiyuan3g.mybroadcast.action.intent.MyMoveReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d("=====TAG=====", "onReceive:我是动态创建");
}
}
有序广播,是通过priority(intent—filter标签下的一个属性)来区分的,跟你的清单文件的顺序没有任何关系,并且发送广播的时候不是通过sendBroadCast发送的,而是通过sendOrderedBroadCast发送。priority的值越大,则这个广播的优先级越高。