만약 게임에 기능을 추가하게 된다면 사용 하려고 만든 함수들 입니다.
1. 와이파이 세기 측정.(API Level에 따라 2개로 나뉨.)
// Android API 30 미만에서 사용 할 함수 ( 20/10/26 기준 최신 API는 29 입니다.)
private static int GetSignalLevel(int numberOfLevels)
{
using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
.GetStatic<AndroidJavaObject>("currentActivity"))
{
var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi");
var wifiInfo = wifiManager.Call<AndroidJavaObject>("getConnectionInfo");
int rssi = wifiInfo.Call<int>("getRssi");
return wifiManager.CallStatic<int>("calculateSignalLevel", rssi, numberOfLevels);
}
}
/// <summary>
/// RSSI 평균값 계산
/// </summary>
/// <param name = "rssi"> AndroidDev에선 평균 -55~-90 사이라고 지정함 </param>
private static int GetRssiLevel(int rssi)
{ // Android API 30 이상에서 사용 하는 함수로 rssi 값의 범위에 따라 직접 Level을 나누어서 적용해야 합니다.
// 알아 본 결과 -60까진 최고세기, 그다음 -70, -80, -90 순으로 적용하면 될 것 같습니다.
using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
.GetStatic<AndroidJavaObject>("currentActivity"))
{
var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi");
var wifiInfo = wifiManager.Call<AndroidJavaObject>("getConnectionInfo");
rssi = wifiInfo.Call<int>("getRssi");
return wifiManager.CallStatic<int>("calculateSignalLevel", rssi);
}
}
2. 현재 디바이스의 API Level 확인 함수
private static int currentAPILevel; // api 레벨 체크 변수
public static int APILevel
{
get
{
#if UNITY_ANDROID
if (Application.isEditor)
{
#endif
return 0;
#if UNITY_ANDROID
}
else if (currentAPILevel == 0)
{
using (var androidVersion = new AndroidJavaClass("android.os.Build$VERSION"))
{
currentAPILevel = androidVersion.GetStatic<int>("SDK_INT");
}
}
return currentAPILevel;
#endif
}
}
3. 현재 인터넷 상태가 와이파이인지, 데이터인지 확인하는 함수
(만약 구현한다면 해당 오브젝트의 Active를 True or False 해줄 것 같아서 GameObject로 함수를 만들었습니다.)
private GameObject CheckConnected()
{
if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
{
return CellularIcon;
}
if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
{
return WifiIIcon;
}
else
return null;
}
'클라이언트 프로그래머의 일기 > 신입 클라이언트 프로그래머의 일기' 카테고리의 다른 글
AndroidX Migration이란? (0) | 2020.10.26 |
---|---|
NGUI 이벤트 정리 (0) | 2020.10.26 |
모바일 게임에 보이는 Wifi 아이콘 어떻게 구현하는걸까? (0) | 2020.10.21 |
미니게임이 DB에 어떻게 보내지고 받는지 분석 (0) | 2020.10.16 |
SeasonEventManager.cs 의 MiniGame 부분 분석 (0) | 2020.10.15 |