Android 判断网络状态对音频静音的实现方法
程序员文章站
2022-06-04 12:18:24
在实际应用中,我们不希望在教室网络,打开游戏就显示较大的声音,进而影响上课质量。因此,就需要让app变得智能,让app可以根据使用者当前网络状态,自动进行静音等操作。
本...
在实际应用中,我们不希望在教室网络,打开游戏就显示较大的声音,进而影响上课质量。因此,就需要让app变得智能,让app可以根据使用者当前网络状态,自动进行静音等操作。
本次内容分为两部分:1. 识别网络环境 2. 实现app自动静音。
自动静音
/** * 实现静音功能 */ private void silentswitchon() { audiomanager audiomanager = (audiomanager) getsystemservice(context.audio_service); if (audiomanager != null) { audiomanager.setringermode(audiomanager.ringer_mode_silent); //静音模式 audiomanager.setstreamvolume(audiomanager.stream_music, 0, audiomanager.flag_play_sound); // 媒体音量设置为0(静音) } }
其中audiomanager.stream_music代表媒体音量,也可以替换成其他的类型,获取其他类型音量。
监听音量键被按下
在activity重写onkeydown方法
public boolean onkeydown(int keycode, keyevent event) { log.d(tag, "onkeydown" + keycode + "" + (keycode==keyevent.keycode_volume_up)); if (keycode == keyevent.keycode_volume_up) { // 音量+键 } if(keycode == keyevent.keycode_volume_down){ // 音量-键 } }
识别网络环境
在我们的app进行网络请求时,经常会遇到断网,重连,数据流量和wifi变化等情况,那么我们要怎么去判断当前的情况呢?接下来就给大家介绍常用的网络状态判断方法。
- 判断是否有网络连接
- 判断wifi网络是否可用
- 判断数据流量是否可用
- 获取当前网络连接的类型信息
- 获取当前的网络状态
- 判断是否是教学点网络
首先在注册表中获得网络状态权限:
<uses-permission android:name="android.permission.access_network_state" />
1.判断是否有网络连接
public static 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; }
有网时返回true,没网时返回false。
1.判断wifi网络是否可用
public static boolean iswificonnected(context context) { if (context != null) { connectivitymanager mconnectivitymanager = (connectivitymanager) context .getsystemservice(context.connectivity_service); networkinfo mwifinetworkinfo = mconnectivitymanager .getnetworkinfo(connectivitymanager.type_wifi); if (mwifinetworkinfo != null) { return mwifinetworkinfo.isavailable(); } } return false; }
是wifi网络返回true,不是wifi返回false。
1.判断数据流量是否可用
public static int getconnectedtype(context context) { if (context != null) { connectivitymanager mconnectivitymanager = (connectivitymanager) context .getsystemservice(context.connectivity_service); networkinfo mnetworkinfo = mconnectivitymanager.getactivenetworkinfo(); if (mnetworkinfo != null && mnetworkinfo.isavailable()) { return mnetworkinfo.gettype(); } } return -1; }
是数据流量时返回true,不是返回false。
获取当前网络连接的类型信息
public static int getconnectedtype(context context) { if (context != null) { connectivitymanager mconnectivitymanager = (connectivitymanager) context .getsystemservice(context.connectivity_service); networkinfo mnetworkinfo = mconnectivitymanager.getactivenetworkinfo(); if (mnetworkinfo != null && mnetworkinfo.isavailable()) { return mnetworkinfo.gettype(); } } return -1; }
获取当前的网络状态
没有网络:0 wifi网络:1 3g网络:2 2g网络:3
public static int getapntype(context context) { int nettype = 0; connectivitymanager connmgr = (connectivitymanager) context .getsystemservice(context.connectivity_service); networkinfo networkinfo = connmgr.getactivenetworkinfo(); if (networkinfo == null) { return nettype; } int ntype = networkinfo.gettype(); if (ntype == connectivitymanager.type_wifi) { nettype = 1;// wifi } else if (ntype == connectivitymanager.type_mobile) { int nsubtype = networkinfo.getsubtype(); telephonymanager mtelephony = (telephonymanager) context .getsystemservice(context.telephony_service); if (nsubtype == telephonymanager.network_type_umts && !mtelephony.isnetworkroaming()) { nettype = 2;// 3g } else { nettype = 3;// 2g } } return nettype; }
1.判断是否是教学点网络
/** * 判断是否是教学点网络,如果是教学点网络,默认静音 */ private void enableplay() { string wifinamesp = (string) commonutils.getmysp(this(上下文), "wi-fi名称(字符串)", "wifiname", string.class, ""); string wifiname = commonutils.getconnectwifissid(); if (!textutils.isempty(wifinamesp) && !textutils.isempty(wifiname) && commonutils.iswifirequirements(wifiname, wifinamesp, true)) { // 默认静音 silentswitchon(); // 调用开始的静音方法 } }
总结
以上所述是小编给大家介绍的android 判断网络状态对音频静音的实现方法,希望对大家有所帮助