Здравствуйте, мне нужно вывести количество оставшегося заряда батареи на смартфоне с помощью шкалы
public static float GetBatteryLevel()
{
if (Application.platform == RuntimePlatform.Android)
{
try
{
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
if (null != unityPlayer)
{
using (AndroidJavaObject currActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
if (null != currActivity)
{
using (AndroidJavaObject intentFilter = new AndroidJavaObject("android.content.IntentFilter", new object[]{ "android.intent.action.BATTERY_CHANGED" }))
{
using (AndroidJavaObject batteryIntent = currActivity.Call<AndroidJavaObject>("registerReceiver", new object[]{null,intentFilter}))
{
int level = batteryIntent.Call<int>("getIntExtra", new object[]{"level",-1});
int scale = batteryIntent.Call<int>("getIntExtra", new object[]{"scale",-1});
// Error checking that probably isn't needed but I added just in case.
if (level == -1 || scale == -1)
{
return 50f;
}
return ((float)level / (float)scale) * 100.0f;
}
}
}
}
}
}
} catch (System.Exception ex)
{
}
}
return 100;
}
это можно сделать с помощью этого кода? помогите пожалуйста, я столько методов перепробовал, и уже не знаю что делать...
Ответы (1 шт):
Автор решения: Максим Фисман
→ Ссылка
Я не понял ваш код, к тому же ваш вопрос не точен. Поэтому просто опишу, как сделать разные шкалы для отражения количества заряда.
Количество заряда на устройстве можно определить с помощью метода SystemInfo.batteryLevel, который возвращает значение от 0 до 1, соответствующее нынешнему заряду. Возвращаем -1, если на данном устройстве невозможно определить уровень заряда.
Шкалу можно создать разными способами:
- Самый простой - шкала-слайдер. Ее значение можно установить через
GetComponent<Slider>().value. Для создания самого слайдера нужно удалить из него все, кроме заднего фона и цветного заполнителя (который по-моему называется fill). Также нужно пометить interectable на false в инскпеторе. - Интересен также вариант SmorclRL о создании ступенчатой шкалы. Для этого одному объекту добавляем LayoutGroup, в него помещаем полоски (обычно разной высоты) 4 или 5... Настраиваем параметры отступов в LayourGroup. В коде делаешь метод
public Transform Lines[];
void setValue (float value) {
float percent = value / maxValue * 100;
int linesVisible = percent / percentPerLine; // percentPerLine = 100/количество полосок
for (int i = 0; i < linesVisible; i++)
Lines[i].setActive(true);
for (int i = linesVisible; i < Lines.Length; i++)
Lines[i].setActive(false);
}