欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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 判断网络状态对音频静音的实现方法,希望对大家有所帮助