下面给大家介绍下Android Studio 导出Unity插件剩余电量和信号强度的教程,想学习的可以看看。
因为游戏时全屏的,所以需要游戏能更加的人性化提示一些信息在界面上。
保卫萝卜3的截图!
http://blog.youkuaiyun.com/u010019717
首先使用 AB工具导出 .jar 包 之前说过: http://blog.youkuaiyun.com/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
package="com.example.asgardgame.androidnative">
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
手机信号相关:
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;
}
}
导出 .jar 包之后的处理 在Unity中的处理:
注: (我并没回去到实际自己想要的效果 和 手机上显示的不同)
usingUnityEngine;
usingUnityEngine.UI;
usingSystem.Collections;
publicclassAndroidNative : MonoBehaviour
{
publicSlider _slider;
publicText _butterryLevel;
publicText _signalStrength;
// Use this for initialization
voidStart()
{
// 开启协程 并保持更新
InvokeRepeating("UpdateUI", 1, 10f);
}
voidUpdateUI()
{
#if !UNITY_EDITOR && UNITY_ANDROID
// 电量相关的设置
_butterryLevel.text = "电量级别:"BatteryState()"电量:"BatteryLevel();
_slider.value = BatteryLevel() *1f/100;
if(Application.internetReachability== NetworkReachability.NotReachable)
{
_signalStrength.text = "没有任何可用的网络!";
}
//当用户使用WiFi时
elseif(Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
{
var value = GetWIFISignalStrength();
_signalStrength.text = "wifi:"value"格子数: "value;
}
//当用户使用移动网络时
elseif(Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
{
var value = GetTeleSignalStrength();
_signalStrength.text = "信号:"value"格子数: "GetSignalLevel(value);
}
#endif
}
///
/// 返回应该显示的格子数(共5个)
///
///
///
privateintGetSignalLevel(intvalue)
{
//1、当信号大于等于 - 85dBm时候,信号显示满格
//2、当信号大于等于 - 95dBm时候,而小于 - 85dBm时,信号显示4格
//3、当信号大于等于 - 105dBm时候,而小于 - 95dBm时,信号显示3格,不好捕捉到。
//4、当信号大于等于 - 115dBm时候,而小于 - 105dBm时,信号显示2格,不好捕捉到。
//5、当信号大于等于 - 140dBm时候,而小于 - 115dBm时,信号显示1格,不好捕捉到。
if(value > -85)
{
return5;
}
elseif(value -95)
{
return4;
}
elseif(value -105)
{
return3;
}
elseif(value -115)
{
return2;
}
elseif(value -140)
{
return1;
}
return-1;
}
publicstaticintCallStatic(stringclassName,stringmethodName,paramsobject[] args)
{
#if UNITY_ANDROID && !UNITY_EDITOR
try
{
stringCLASS_NAME ="com.example.asgardgame.androidnative.GetBattery";// package.classname
AndroidJavaObject bridge = newAndroidJavaObject(CLASS_NAME);
intvalue = bridge.CallStatic(methodName, args);
returnvalue;
}
catch(System.Exception ex)
{
Debug.LogWarning(ex.Message);
}
#endif
return-1;
}
// 返回状态 是枚举-1,0,1,2 如下面
publicstaticintBatteryState()
{
returnCallStatic("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
publicstaticintBatteryLevel()
{
returnCallStatic("GetBattery","BatteryLevel");
}
// 返回WIFI 返回的是负值 越靠近0 越强
publicstaticintGetWIFISignalStrength()
{
returnCallStatic("GetWIFIRssi","GetWIFISignalStrength");
}
// 返回Telephone
publicstaticintGetTeleSignalStrength()
{
returnCallStatic("GetWIFIRssi","GetTeleSignalStrength");
}
}
http://blog.youkuaiyun.com/u010019717
闲来无事, 多附一张图吧! (安卓知识体系图)
http://blog.youkuaiyun.com/u010019717/article/details/52507329