根据wifi来吐司记录
权限
⚠️广播不要忘记反注册
unregisterReceiver(networkChangeReceivers);
终于合适了
前几天遇到这么一个需求就是在看视频的时候会出现关闭wifi的时候,因为视频是一个耗费流量比较大的功能所以需要提醒用户,但是不可能用户每次打开视频的时候都要流量提示这样对于用户不太友好所以每次开启wifi显示一次(当前是流量数据,可能会消耗您的流量),这个时候就需要但是只显示一次下一次还要这就需要sp(SharedPreferences)来记录是否已经吐司过弹出条件就是当Wi-Fi关闭的时候进行监听判断数据是否可用,这就需要两个广播进行相互监听(单独一个有限制)
注意的是Wi-Fi监听的addAction是⚠️
WifiManager.WIFI_STATE_CHANGED_ACTION//他不能监听网络
注意⚠️网络监听的addAction是
"android.net.conn.CONNECTIVITY_CHANGE"
所以需要两个广播进行相互监听
会有人说用这个
在我这他不准
ConnectivityManager.CONNECTIVITY_ACTION
上代码吧
首先是wifi监听是否开启
public class NetworkChangeReceivers extends BroadcastReceiver {
private static final String CONFIGNET = "confignet";
private static final String ISFIRST="isfirst";
private SharedPreferences canfignet;
private SharedPreferences.Editor edited;
private boolean myIsfirst;
private NetworkInfo networkInfo;
@Override
public void onReceive(Context context, Intent intent) {
//监听wifi
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
canfignet = context.getSharedPreferences(CONFIGNET, Context.MODE_PRIVATE);
ConnectivityManager connectionManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = connectionManager.getActiveNetworkInfo();
edited = canfignet.edit();
switch (wifiState) {
/*case WifiManager.WIFI_STATE_DISABLED:
edited.putBoolean(ISFIRST, false);
edited.commit();
break;*/
case WifiManager.WIFI_STATE_ENABLED:
edited.putBoolean(ISFIRST, true);
edited.commit();
break;
}
}
}
接下来是MainActivity
public class MainActivity extends AppCompatActivity {
private static final String CONFIGNET = "confignet";
private static final String ISFIRST = "isfirst";
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;
private SharedPreferences canfignet;
private SharedPreferences.Editor edited;
private boolean myIsfirst;
private NetworkChangeReceivers networkChangeReceivers;
private IntentFilter intentFilters;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceivers = new NetworkChangeReceivers();
intentFilters = new IntentFilter();
intentFilters.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(networkChangeReceivers,intentFilters);
//创建动态广播
networkChangeReceiver = new NetworkChangeReceiver();//创建接收对象
//创建过滤器
this.intentFilter = new IntentFilter();
this.intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//给过滤器添加一个action,当条件满足的时候自动发送广播
registerReceiver(this.networkChangeReceiver, this.intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
unregisterReceiver(networkChangeReceivers);
}
public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
// 判断是否为wifi网络
public static boolean isWifi(Context mContext) {
ConnectivityManager connectivityManager = (ConnectivityManager) mContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
//网络提示广播
class NetworkChangeReceiver extends BroadcastReceiver {
private NetworkInfo networkInfo;
@Override
public void onReceive(Context context, Intent intent) {
canfignet = getSharedPreferences(CONFIGNET, Context.MODE_PRIVATE);
edited = canfignet.edit();
myIsfirst = canfignet.getBoolean(ISFIRST, true);
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
if (myIsfirst) {
if (!isWifi(context)&&isNetworkConnected(context)) {
edited.putBoolean(ISFIRST, false);
edited.commit();
Toast.makeText(context, "将消耗您的流量", Toast.LENGTH_SHORT).show();
}
if (isWifi(context)&&isNetworkConnected(context)) {//有网络并且WIFI环境存储状态
edited.putBoolean(ISFIRST, true);
edited.commit();
// Toast.makeText(context, "是wifi并且有网络", Toast.LENGTH_SHORT).show();
}
}
}
}
}