N在ConnectivityManager方面的API变动很大。其中在移动流量部分多了个流量节省程序(不是Chrome里面那个经Google服务器中转的那个,那个国内没法用) 可以在设置下,流量使用情况里面可以开启或关闭这个功能。开启后(默认是允许后台数据),会有一个AppList,让你选择不限制数据使用的APP。如果想要关闭后台数据,可以在流量使用情况里开关后台数据。 那今天就来谈谈InWall环境下,开启DataSaver后后台流量以及推送的处理 开始有些特别处理,比如在流量节省程序开之后,关了后台数据,后台就无法连接网络,这时我们就需要启动界面时请求开启,intent需要设置一个data也就是所在程序的包名
复制代码 intent=new Intent(Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS);
Uri uri = Uri.parse("package:com.demo.napi.DataSaver"); intent.setData(uri); startActivity(intent);
写接收器来监听流量节省开关事件。以下是我的测试结果。
复制代码 class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MainActivity","onReceive "+ intent.getAction());
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
boolean isNetworkMetered = manager.isActiveNetworkMetered();
Log.d("MainActivity","isNetworkMetered = "+ isNetworkMetered);
if(isNetworkMetered){
Log.d("MainActivity","getRestrictBackgroundStatus = "+ manager.getRestrictBackgroundStatus());
switch (manager.getRestrictBackgroundStatus()){
case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED:
//关闭了流量节省,流量不限制。
break;
case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED:
//开启了流量节省或者流量节省开启的状态下允许后台数据由关到开。这时服务里后台运行的流量不可以使用,假如程序不是活动,甚至数据也不可以使用。
break;
case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED:
//流量节省开启的状态下,不限制后台数据开启了,这时流量可以使用,即使程序切到后台,活动变为虚,数据也可以使用。
break;
}
}
}
}
再注册一下接收器
复制代码 registerReceiver(DataSaverReceiver(),
newIntentFilter(ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED));
自己尝试了下,觉得不难理解,觉得如果利用好,这个api在国内一样能有大用处,不过。。。某些国内主流软件还在使用4.0的API(不不不,我不是针对各大Bank),普及起来,难度很大啊!