Здравствуйте, мне нужно вывести количество оставшегося заряда батареи на смартфоне с помощью шкалы

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);
}
→ Ссылка