孙广东 2016.9.11
http://blog.csdn.net/u010019717
因为游戏时全屏的 , 所以需要游戏能更加的人性化提示一些信息在界面上。
保卫萝卜3的截图!
http://blog.csdn.net/u010019717
首先使用 AB工具导出 .jar 包 之前说过: http://blog.csdn.net/u010019717/article/details/51762010
packagecom.example.asgardgame.androidnative; importandroid.os.BatteryManager; importandroid.content.Context; importandroid.content.Intent; importandroid.app.Activity; importandroid.content.IntentFilter; importcom.unity3d.player.UnityPlayer; publicclassGetBattery{ //状态:是说,满电、正在充电,正在使用等 publicstaticintBatteryState(){ finalActivityactivity=UnityPlayer.currentActivity; finalContextcontext=activity.getApplicationContext(); IntentFilterifilter=newIntentFilter(Intent.ACTION_BATTERY_CHANGED); IntentbatteryStatus=context.registerReceiver(null,ifilter); intstatus=batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS,-1); intnowState=-1; switch(status){ caseBatteryManager.BATTERY_STATUS_FULL: //Full nowState=2; break; caseBatteryManager.BATTERY_STATUS_CHARGING: //Charging nowState=1; break; caseBatteryManager.BATTERY_STATUS_DISCHARGING: //Unplugged nowState=0; break; caseBatteryManager.BATTERY_STATUS_NOT_CHARGING: //Unplugged nowState=0; break; caseBatteryManager.BATTERY_STATUS_UNKNOWN: //Unknown nowState=-1; break; } returnnowState; } //剩余电量,满电是100 publicstaticintBatteryLevel(){ finalActivityactivity=UnityPlayer.currentActivity; finalContextcontext=activity.getApplicationContext(); IntentFilterifilter=newIntentFilter(Intent.ACTION_BATTERY_CHANGED); IntentbatteryStatus=context.registerReceiver(null,ifilter); intnowLevel=batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL,-1); returnnowLevel; } }
还没完, 需要权限: AndroidManifest.xml
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.asgardgame.androidnative">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
</application>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
packagecom.example.asgardgame.androidnative; importandroid.annotation.TargetApi; importandroid.app.Activity; importandroid.content.Context; importandroid.net.wifi.WifiInfo; importandroid.net.wifi.WifiManager; importandroid.os.Build; importandroid.telephony.CellInfo; importandroid.telephony.CellInfoCdma; importandroid.telephony.CellInfoGsm; importandroid.telephony.CellInfoLte; importandroid.telephony.CellInfoWcdma; importandroid.telephony.CellSignalStrength; importandroid.telephony.CellSignalStrengthCdma; importandroid.telephony.CellSignalStrengthGsm; importandroid.telephony.CellSignalStrengthLte; importandroid.telephony.TelephonyManager; importcom.unity3d.player.UnityPlayer; publicclassGetWIFIRssi{ publicstaticintGetWIFISignalStrength(){ finalActivityactivity=UnityPlayer.currentActivity; finalContextcontext=activity.getApplicationContext(); //得到的值是一个0到-100的区间值,是一个int型数据, //其中0到-50表示信号最好, //-50到-70表示信号偏差, //小于-70表示最差,有可能连接不上或者掉线。 //这个函数是返回5个级别!!!!!! WifiManagerwifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE); intnumberOfLevels=5; WifiInfowifiInfo=wifiManager.getConnectionInfo(); intlevel=WifiManager.calculateSignalLevel(wifiInfo.getRssi(),numberOfLevels); returnlevel; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) publicstaticintGetTeleSignalStrength() { finalActivityactivity=UnityPlayer.currentActivity; finalContextcontext=activity.getApplicationContext(); intlevel=0; finalTelephonyManagertm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); for(finalCellInfoinfo:tm.getAllCellInfo()) { if(infoinstanceofCellInfoGsm){ finalCellSignalStrengthGsmgsm=((CellInfoGsm)info).getCellSignalStrength(); level=gsm.getLevel(); }elseif(infoinstanceofCellInfoCdma){ finalCellSignalStrengthCdmacdma=((CellInfoCdma)info).getCellSignalStrength(); level=cdma.getLevel(); }elseif(infoinstanceofCellInfoLte){ finalCellSignalStrengthLtelte=((CellInfoLte)info).getCellSignalStrength(); level=lte.getLevel(); }elseif(infoinstanceofCellInfoWcdma){ finalCellSignalStrengthwcdma=((CellInfoWcdma)info).getCellSignalStrength(); level=wcdma.getLevel(); } } returnlevel; } }
using UnityEngine; using UnityEngine.UI; using System.Collections; public class AndroidNative : MonoBehaviour { public Slider _slider; public Text _butterryLevel; public Text _signalStrength; // Use this for initialization void Start() { // 开启协程 并保持更新 InvokeRepeating("UpdateUI", 1, 10f); } void UpdateUI() { #if !UNITY_EDITOR && UNITY_ANDROID // 电量相关的设置 _butterryLevel.text = "电量级别:" + BatteryState() + "电量:" + BatteryLevel(); _slider.value = BatteryLevel() *1f/100; if (Application.internetReachability== NetworkReachability.NotReachable) { _signalStrength.text = "没有任何可用的网络!"; } //当用户使用WiFi时 else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) { var value = GetWIFISignalStrength(); _signalStrength.text = "wifi:" + value + "格子数: " + value; } //当用户使用移动网络时 else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork) { var value = GetTeleSignalStrength(); _signalStrength.text = "信号:" + value + "格子数: " + GetSignalLevel(value); } #endif } /// <summary> /// 返回应该显示的格子数(共5个) /// </summary> /// <param name="value"></param> /// <returns></returns> private int GetSignalLevel(int value) { //1、当信号大于等于 - 85dBm时候,信号显示满格 //2、当信号大于等于 - 95dBm时候,而小于 - 85dBm时,信号显示4格 //3、当信号大于等于 - 105dBm时候,而小于 - 95dBm时,信号显示3格,不好捕捉到。 //4、当信号大于等于 - 115dBm时候,而小于 - 105dBm时,信号显示2格,不好捕捉到。 //5、当信号大于等于 - 140dBm时候,而小于 - 115dBm时,信号显示1格,不好捕捉到。 if (value > -85) { return 5; } else if (value< -85 && value > -95) { return 4; } else if (value < -95 && value > -105) { return 3; } else if (value < -105 && value > -115) { return 2; } else if (value < -115 && value > -140) { return 1; } return -1; } public static int CallStatic(string className, string methodName, params object[] args) { #if UNITY_ANDROID && !UNITY_EDITOR try { string CLASS_NAME = "com.example.asgardgame.androidnative.GetBattery"; // package.classname AndroidJavaObject bridge = new AndroidJavaObject(CLASS_NAME); int value = bridge.CallStatic<int>(methodName, args); return value; } catch (System.Exception ex) { Debug.LogWarning(ex.Message); } #endif return -1; } // 返回状态 是枚举-1,0,1,2 如下面 public static int BatteryState() { return CallStatic("GetBattery", "BatteryState"); } /* switch (status) { case BatteryManager.BATTERY_STATUS_FULL: // 满电 // Full nowState = 2; break; case BatteryManager.BATTERY_STATUS_CHARGING: // 正在充电 // Charging nowState = 1; break; case BatteryManager.BATTERY_STATUS_DISCHARGING: // Unplugged nowState = 0; break; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: // Unplugged nowState = 0; break; case BatteryManager.BATTERY_STATUS_UNKNOWN: // Unknown nowState = -1; break; } */ // 返回剩余电量, 满电是100 public static int BatteryLevel() { return CallStatic("GetBattery", "BatteryLevel"); } // 返回WIFI 返回的是负值 越靠近0 越强 public static int GetWIFISignalStrength() { return CallStatic("GetWIFIRssi", "GetWIFISignalStrength"); } // 返回Telephone public static int GetTeleSignalStrength() { return CallStatic("GetWIFIRssi", "GetTeleSignalStrength"); } }
http://blog.csdn.net/u010019717
闲来无事, 多附一张图吧! (安卓知识体系图)