在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先。 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法。这里提供了几种思路,虽然可能对待 手机的方式不太友好。 0)NetworkMode 来自Android源码,The preferred network mode 源码复制打印? 7 = Global 6 = EvDo only 5 = CDMA w/o EvDo 4 = CDMA / EvDo auto 3 = GSM / WCDMA auto 2 = WCDMA only 1 = GSM only 0 = GSM / WCDMA preferred 1)HardCode 可以使用Intent唤起设置的网络类型选择界面,先获取指定选项的坐标,通过该坐标结合sendevent或 者monkey实现点击切换。至于如何唤起界面这里面有尝试,给不出代码,对于坐标点击,可结合本人之 前的关于android测试的文章实现。 2)Phone test 与方式1类似,不同的是需要在拨号界面输入 *#*#4636#*#* 唤出测试界面,进入手机信息一栏即可 找到相关选项,不多说。 3)Database 在shell中执行数据库修改语句,更改完有关网络类型的值之后触发加载 源码复制打印? sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update secure set value=‘2‘ where name=‘preferred_network_mode‘" 然后重启手机或者直接kill掉进程com.android.phone,如果执行kill需设备具有root权限 如果手机有装busybox,可以直接执行 源码复制打印? ps|grep -v ‘grep ‘| grep com.android.phone | awk ‘{FS=" "} {print $2}‘ | while read s; do kill -9 $s; done 此方法本人觉得成功系数不太高,至少在自己设备上尝试是这样,一说是修改global表,未验证 4)settings 如果你的系统在4.2或以上,可以直接使用settings命令,以下命令为飞行模式设置,具体可参照下 一个方式修改 源码复制打印? settings put global airplane_mode_on 1 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true settings put global airplane_mode_on 0 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false 5)AirplaneMode 模仿飞行模式设置的方式,修改系统Secure属性,直接上代码 源码复制打印? /** * 设置网络模式 * @param context * @param mode */ public void setPreferedNetworkType(Context context, int mode){ //<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> Settings.Secure.putInt(context.getContentResolver(), "preferred_network_mode", mode); // change mode Intent intent = new Intent("com.android.phone.CHANGE_NETWORK_MODE"); intent.putExtra("com.android.phone.NEW_NETWORK_MODE", mode); context.sendBroadcast(intent); } /** * 获取当前网络模式 * @param context * @return * @throws SettingNotFoundException */ public int getPreferedNetworkType(Context context) throws SettingNotFoundException { return Settings.Secure.getInt(context.getContentResolver(), "preferred_network_mode"); } 这个就很直接了,马上可以看得到效果,唯一缺陷,就是自己的apk必须具有system权限,至 于2.3以前的系统如何,我就没验证了。 需要说明的是,方法3、4、5并非本人原创,乃国外牛人之作品,借此弥补国内资料的欠缺 源码复制打印? http://www.clearevo.com/blog/howto/2012/10/10/android_force_wcdma_or_gsm_or_auto_from_shell.html http://forum.xda-developers.com/showthread.php?t=2230207 转:http://hmxingkong.ddjava.com/blog/blog.html?blogId=662 时间: 2024-11-05 00:19:07
判断网络类型是wifi,还是3G,还是2G网络,对不同 的网络进行不同的处理,现将判断方法整理给大家,以供参考 说明:下面用到的数据移动2G,联通2G,联通3G,wifi我都已经测试过,暂时手上 没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果 发送给大家. ConnectivityManager connectMgr = (ConnectivityManager) this .getSystemService(Context.CONNECTIVITY_SERVICE);
首先工程Manifest文件要引用: 1 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> //获取网络服务 1 public static String getNetworkTypeName(Co
平时,3G和WIFI 都开着的时候,Android默认使用Wifi,但现实环境中不可能到处都有wifi,所以手机会经常自动切换网络. 有的时候,手机一开始使用wifi上网,当进入待机后10-30分钟,会自动从Wifi切换到3G网络. 如果编写网络程序,网络自动切换对程序的影响是非常明显的,IP地址肯定会变化. 感觉Android环境与我们日常用的windows环境还是有很大不同的,写Android程序,明显需要注意的细节有很多. ---------------------------------
1.介绍 网络提示是App开发中不可缺少的模块.现在App需求智能化,要求根据网络的变化可以自动做出合理的处理(包括提示.下载...等).对于网络的处理也非常简单,实现也就几行代码(这是因为,苹果对网络变化进行了整理). 苹果官方提供一个监控网络变化的文件名字为 Reachability.对于Reachability也有其不足的地方,它不能更详细的判断用户是那种手机网络,只是提供给开发者一个统称的表示. 2.官方 Reachability 的介绍 Reachability(官方)的获取方法是打开
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也分为2G/3G/4G等不同制式.而不同的网络制式又对用户体验产生 较为明显的影响(对于依赖网络的项目而言).因此很有必要对不同的网络制式作相应的优化. 而在iOS当中,无论是苹果官方提供的Reachability类还是较为常用的第三方网络类AFNetworking,它们提供的网络环境判断也仅限 于W
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也分为2G/3G/4G等不同制式.而不同的网络制式又对用户体验产生 较为明显的影响(对于依赖网络的项目而言).因此很有必要对不同的网络制式作相应的优化. 而在iOS当中,无论是苹果官方提供的Reachability类还是较为常用的第三方网络类AFNetworking,它们提供的网络环境判断也仅限 于W
我们项目的工具类中,这些方法应该是常驻方法,因为他们太常用了,一方面将这些方法总结在这篇文章中,以便于自己日后使用,另一方面也给大家提供个方便,省的每次到处去找了. 1.判断当前是否已经连网 不管连接的是WIFI还是移动网络,最终都会返回true,否则返回false public static boolean isNetworkAvailable(Context context){ if (context!=null) { //获取系统服务 ConnectivityManager cm = (C
一般对网络的判断都是判断是否联网,不过有时候我们需要知道具体的网络类型,比如在3g网络下,百度地图的定位功能存在很大的偏差,这就需要提前判断网络类型针对3g网络情况做特殊的处理. 关于Android如何检测网络的类型,网上代码很多,但是有用的不多,真正解决了问题的我只找到一篇(见文章末尾网址),为了更好的方便自己理解,对这片文章做了解释和整理. 在android中判断网络需要用到ConnectivityManager,下面的方法演示了如何用ConnectivityManager判断当前是否联网:
在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据. 通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,