Android N - Data Saver

来源:互联网 发布:北大发展研究院知乎 编辑:程序博客网 时间:2024/05/16 10:56

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 0