android studio 电量分析,Android Studio 导出Unity插件(剩余电量、信号强度)

下面给大家介绍下Android Studio 导出Unity插件剩余电量和信号强度的教程,想学习的可以看看。

因为游戏时全屏的,所以需要游戏能更加的人性化提示一些信息在界面上。

7762e995ea7ba033ab2ba3557ae0f9f1.png

保卫萝卜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

闲来无事,  多附一张图吧! (安卓知识体系图)

fe68d852924e32b7a834fdb421d4145c.png

http://blog.youkuaiyun.com/u010019717/article/details/52507329

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值