一、分类
规范播送
是一种完整异步实行的播送,在播送发出后,一切的播送吸收器险些会在统一时候接受到这条播送音讯,没有任何递次而言。这类播送效力对照高,然则没法被截断。
有序播送
是一种同步实行的播送,在播送发出后,统一时候只会有一个播送吸收器能够或许收到这条播送音讯,当这个播送吸收器中的逻辑实行终了后,播送才会继续通报。不言而喻,这类播送是有先后递次的,优先级高的播送吸收器就能够或许先收到播送音讯,而且前边的播送吸收器能够截断正在通报的播送。
二、动态注册吸收体系播送
就以监听收集变化为例吧!
步调
1、声明收集权限
<use-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2、建立一个类NetworkChangeReceiver继续自BroadcastReceiver。
3、建立一个IntentFilter实例,并为其增加一个值为android.net.conn.CONNECTIVITY_CHANGE的action。
4、建立NetworkChangeReceiver的实例,然后挪用registerReceiver()要领举行注册,同时传入NetworkChangeReceiver的实例和IntentFilter的实例。
5、末了不要遗忘作废注册播送吸收器(因为此播送吸收器为动态注册的)。
代码
package com.henuajy.broadcasttest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver netWorkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
netWorkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(netWorkChangeReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(netWorkChangeReceiver);
}
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"network chages",Toast.LENGTH_SHORT).show();
}
}
}
三、静态注册吸收体系播送
依然以监听体系收集状况为例
步调
1、新建一个类NetworkChangeReceiver,继续BroadcastReceiver并重写onReceive()要领;
package com.henuajy.notificationtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//收集状况发生变化的逻辑
}
}
2、在配置文件中的manifest标签下声明收集权限;
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3、在配置文件中的application标签下增加receiver并增加action--“android.net.conn.CONNECTIVITY_CHANGE”;
<receiver
android:name=".NetworkStateReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
注重
Android体系为了珍爱用户装备的平安和隐私,做了严厉的划定:若是顺序须要举行一些对用户来书对照敏感的操纵,就必须在配置文件中声明权限才能够,不然顺序会直接瓦解。好比这里接见体系的收集状况就是须要声明权限的。
小增补
若是想要推断收集状况是开启照样封闭,可用以下要领:
1、经由过程getSystemService()【由因而关于收集状况的,以是要传入参数Context.CONNECTIVITY_SERVICE】要领猎取ConnectionManager类的实例manager;
2、经由过程挪用manager的getActiveNetworkInfo()要领猎取NetworkInfo类的实例info;
3、经由过程info的isAvailable()【返回bool值】要领推断收集是不是可用。
ConnectionManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null&&info.isAvailable()){
//收集可用的逻辑
}else{
//收集不可用的逻辑
}
Comment here is closed