Android N - Data Saver

Android N - Data Saver

android n在网络ConnectivityManager api的变动比较大。其中在蜂窝数据有一个流量保护机制,Data Saver。

可以在setting目录下,Data Usage里面可以开启关闭Data saver功能。开启Data saver后(默认是enable background data usage),会有一些应用列表出来,让你选择是否允许 unrestricted data access(不限制数据使用)。如果想要关闭background data usage,可以在Data Usage里找cellur data useage 选择你的ap,开关background data usage。


我们的程序需要适当的做一些事情,比如在data saver(仅适用于蜂窝数据)开之后,enable background data关了,后台就无法连接网络,这时我们就需要启动设置界面请求开启,intent 需要设置一个data也就是所在程序的包名。code 如下,

Intent intent =new Intent(Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS);
                Uri uri = Uri.parse("package:com.jxctest.nostalgiachild.jxctest");
                intent.setData(uri);
                startActivity(intent);

写receiver来监听开关data saver option changed事件。以下是我的测试结果(或有疏漏),只是助我自己记忆理解。

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:
                        //关闭了data saver,蜂窝数据不限制。
                        break;
                    case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED:
                        //开启了Data saver 或者 Data saver开启的状态下 enable backgroud data由关到开。这时service里后台运行的蜂窝数据不可以使用,假如程序不是activie程序,数据也不可以使用。
                        break;
                    case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED:
                        //Datat saver开启的状态下,allow unrestricted data access 开启了,这时蜂窝数据可以使用,即使程序切到后台,activie 程序非他自己,数据也可以使用。
                        break;
                }
            }
        }
    }

再在代码里注册一下这个receiver,code如下

registerReceiver(new MyReceiver(),new IntentFilter(ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED));

简单的介绍一下Data Saver,自己也尝试了一下,感觉不算难理解,是一个实在api了,至少照顾到了我们Android用户。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值