Cocos2dx 获取安卓手机网络类型及强度,电量等信息
来源:互联网 发布:js设置input隐藏显示 编辑:程序博客网 时间:2024/04/30 09:02
最新做的游戏界面要显示设备的当前网络,电量等信息。故此,写下这篇博客,相当于自己的一个复习吧。
获取网络类型及网络强度
ps:这里只需要区分移动数据和wifi即可,具体需要区分运营商请自行补全。
Java层获取相关信息
由于网络相关信息是底层信息,故此调用的底层接口。
移动数据状态可以用TelephonyManager监听LISTEN_SIGNAL_STRENGTHS的方式进行获取,在发生变化时会自动通知。
wifi采用WifiManager监听WIFI_SERVICE的方式进行。在发生变化时会自动通知。
ps:这里网络强度分为移动网络和wifi
声明相关变量:
//网络状态强度 public static final int NETLEVEL_STRENGTH_NONE_OR_UNKNOWN = 0; public static final int NETLEVEL_STRENGTH_POOR = 1; public static final int NETLEVEL_STRENGTH_MODERATE = 2; public static final int NETLEVEL_STRENGTH_GOOD = 3; public static final int NETLEVEL_STRENGTH_GREAT = 4; //信号监听 TelephonyManager Tel; MyPhoneStateListener MyListener; public static int singnalLevel; //Wifi监听 private static WifiInfo wifiInfo = null; private static WifiManager wifiManager = null; public static int wifiLevel;
在onCreate等方法中添加监听:
//添加信号强度监听 MyListener = new MyPhoneStateListener(); Tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); //添加wifi强度监听 wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
@Override protected void onPause() { super.onPause(); Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE); } @Override protected void onResume() { super.onResume(); Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); }
获取信息代码:
ps:这里向C++传值的时候用到了数组,定义了返回值会数组的java方法:public static int[] getNetInfo(){…}
//--------------------------------------网络类型及强度 begin------------------------------------------ //定义数组用于返回 static int[] netInfo = new int[2]; //netType -1: 没有网络 1: WIFI 2: 移动数据 //netLevel 1: None 2:poor 3:moderate 4:good 5:great public static int[] getNetInfo() { Log.d("getNetInfo", "enter the function getNetInfo ----- "); //根据Android的安全机制,在使用ConnectivityManager时,必须在AndroidManifest.xml中添加<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 否则无法获得系统的许可。 ConnectivityManager connMgr = (ConnectivityManager)appactivity.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if( null == networkInfo) return netInfo; int nType = networkInfo.getType(); if (nType == ConnectivityManager.TYPE_MOBILE) { netInfo[0] = 2; } else if (nType == ConnectivityManager.TYPE_WIFI) { netInfo[0] = 1; } Log.d("getNetInfo", "java ---- netType --- "+ netInfo[0]); //according to netType. set the value of netLevel switch (netInfo[0]) { case 1: netInfo[1] = getWifiLevel(); break; case 2: netInfo[1] = getSingnalLevel(); break; default: break; } Log.d("getNetInfo", "java ---- netLevel --- "+ netInfo[1]); return netInfo; } //信号强度等级 private class MyPhoneStateListener extends PhoneStateListener { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); int asu = signalStrength.getGsmSignalStrength(); if (asu <= 2 || asu == 99) singnalLevel = NETLEVEL_STRENGTH_NONE_OR_UNKNOWN; else if (asu >= 12) singnalLevel = NETLEVEL_STRENGTH_GREAT; else if (asu >= 8) singnalLevel = NETLEVEL_STRENGTH_GOOD; else if (asu >= 5) singnalLevel = NETLEVEL_STRENGTH_MODERATE; else singnalLevel = NETLEVEL_STRENGTH_POOR; } };/* End of private Class */ //获取信号强度 public static int getSingnalLevel() { return singnalLevel; } //获取wifi强度 public static int getWifiLevel() { wifiInfo = wifiManager.getConnectionInfo(); int wifiStrength = wifiInfo.getRssi(); if (wifiStrength <= 0 && wifiStrength >= -50) { wifiLevel = NETLEVEL_STRENGTH_GREAT; } else if (wifiStrength < -50 && wifiStrength >= -70) { wifiLevel = NETLEVEL_STRENGTH_GOOD; } else if (wifiStrength < -70 && wifiStrength >= -80) { wifiLevel = NETLEVEL_STRENGTH_MODERATE; } else if (wifiStrength < -80 && wifiStrength >= -100) { wifiLevel = NETLEVEL_STRENGTH_POOR; } else { wifiLevel = NETLEVEL_STRENGTH_NONE_OR_UNKNOWN; } return wifiLevel; }//--------------------------------------网络类型及强度 end------------------------------------------
C++端接收返回的网络类型和状态
void getNetInfo(int &netType, int &netLevel) {#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID JniMethodInfo t; bool isHave = JniHelper::getStaticMethodInfo(t, JAVA_CLASSNAME, "getNetInfo", "()[I"); if (isHave) { jintArray msg = (jintArray)t.env->CallStaticObjectMethod(t.classID, t.methodID); int len = t.env->GetArrayLength(msg); jint* elems =t.env-> GetIntArrayElements(msg, 0); if (2 == len) { netType = elems[0]; netLevel = elems[1]; } log(" netType :%d----------netLevel: %d ----------- %d", netType, netLevel, len); t.env->DeleteLocalRef(t.classID); } else { cocos2d::log("JniFun call getNetInfo error!"); }#endif }
获取电量相关信息
android层面可以利用BroadcastReceiver机制,获取电池电量变化的ACTION_BATTERY_CHANGED intent,进而获取当前android设备的电池状态。(这里只获取了电量。)
步骤:
1. 创建一个监听ACTION_BATTERY_CHANGED事件的intentFilter。
2. 创建一个BroadcastReceiver对象,该对象可以接收broadcast intent。
3. 注册BroadcastReceiver对象来监听ACTION_BATTERY_CHANGED事件。
4. 在BroadcastReceiver对象中,重写onReceive方法,在onReceive方法的传入参数intent里获取需要的电池状态信息。
5. 在生命周期结束时,取消step4中的注册。
声明相关变量
/电量数值 BatteryBroadcastReceiver receiver = new BatteryBroadcastReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); public static int batteryLevel = 0;
添加及注销监听
onCreate方法
//添加电量信息监听 registerReceiver(receiver, filter);
@Override protected void onResume() { super.onResume(); registerReceiver(receiver, filter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); }
具体获取方法
//--------------------------------------电量信息 begin------------------------------------------ class BatteryBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //判断它是否是为电量变化的Broadcast Action if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){ //获取当前电量 int level = intent.getIntExtra("level", 0); //电量的总刻度 int scale = intent.getIntExtra("scale", 100); //把它转成百分比 batteryLevel = level * 100 / scale; } } } //获取电量信息 public static int getBatteryLevel() { return batteryLevel; } //--------------------------------------电量信息 end------------------------------------------
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- unity如何获取安卓手机的时间电量网络信息
- 安卓检测wifi网络状态以及强度,及检测电量。
- 获取安卓手机网络类型
- 手机信息的获取(手机IMEI,手机sim卡的IMSI,网络类型(WiFi,LTE(即4G)等),信号强度(蜂窝网络非WiFi),经纬度)
- Unity&Android之二:获取手机电量信息、网络状况
- unity获取手机电量信息
- Android 获取手机电量信息
- 安卓手机获取手机通话记录信息
- Cocos项目为安卓添加获取手机信号强度和网络类型的功能(JAVA/C++/Lua)
- Unity获取手机电量 网络和时间
- 如何获取网络延迟,手机电量
- 安卓获取网络类型
- Unity IOS获取电量和网络类型
- 监听安卓手机电量BroadcastRecevier
- iOS状态栏操作之获取WiFi信号强度,网络类型,运营商,电池电量,系统时间等
- 获取安卓手机软硬件信息
- 回文字符串
- JavaScript基础笔记
- 剑指offer——字符串的排列
- 翻转单词顺序vs左旋转字符串
- 使用Hexo一步一步搭建github博客
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- POJ 3174 Alignment of the Planets
- 设置tabBar、导航栏背景的一些小方法等等
- Xutils3入门
- 移动端的复制按钮,
- 二维码、条形码生成
- VLC框架分析
- NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
- 计算距离当前时间相隔的天数,小时数,分数,秒数