Как вызвать переменную из другого класса в C# (мобильное приложение)

Я работаю над Visual Studio 2019. У меня есть переменная с именем «batt_lev», которая находится в BatteryAlert.Android -> BatteryService1.cs. Мне нужно вызвать эту переменную в общем коде в MainPage.xaml.cs в методе с именем «void Etichetta()», где я должен использовать эту переменную. Я пытался использовать BatteryService1.batt_lev, как вы можете видеть, но ошибка "нет BatteryService1 в этом контексте".

Кто-нибудь может мне помочь?

MainPage.xaml.cs в общем коде

namespace BatteryAlert
{
    public partial class MainPage : ContentPage
    {
        private double batt_lev;
        


        public MainPage()
        {
            
            InitializeComponent();
            DependencyService.Get<IUpLoad>().upLoad();
            //Etichetta();
            //DependencyService.Get<IAndroidService>().StartServicee();
            //Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
            

        }

        void Etichetta()
        {
            
            //Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
 
            batt_lev = (float)Battery.ChargeLevel;
            CounterLabel.Text = BatteryService1.batt_lev.ToString("N2");
        }
    }
}

BatteryService1.cs в BatteryAlert.Android

namespace BatteryAlert.Droid
{
    [Service(Name = "com.companyname.BatteryAlert.BatteryService1")]
    public class BatteryService1 : JobIntentService
    {
        private static int MY_JOB_ID = 1000;
        public double batt_lev;
        List<double> valoreControllo = new List<double>()
        {
            0.65, 0.60, 0.55, 0.50, 0.45, 0.40, 0.35, 0.30, 0.25, 0.20, 0.15, 0.10, 0.05
        };


        protected override void OnHandleWork(Intent p0)
        {
            Device.StartTimer(new TimeSpan(0, 0, 10), () =>
            {
                // do something every 10 seconds
                Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
                //DependencyService.Get<IAudio>().PlayAudioFile("suono_123.wav");
                return true; // runs again, or false to stop
            });
            
        }

        public static void EnqueueWork(Context context, Intent work)
        {
            Java.Lang.Class cls = Java.Lang.Class.FromType(typeof(BatteryService1));

            try
            {
                EnqueueWork(context, cls, MY_JOB_ID, work);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: {0}", ex.Message);
            }

        }

        void Battery_BatteryInfoChanged(Object sender, BatteryInfoChangedEventArgs e)
        {
            batt_lev = (double)e.ChargeLevel;
            batt_lev = Math.Round(batt_lev, 2);

            if (valoreControllo.Contains(batt_lev))
            {
                //CounterLabel.Text = batt_lev.ToString("N2");
                DependencyService.Get<IAudio>().PlayAudioFile("suono_123.wav");
            }

        }
    }
}

batt_lev не является статическим, поэтому для доступа к нему необходимо создать экземпляр BatteryService1. Похоже, вы используете внедрение зависимостей, поэтому вам следует внедрить BatteryService1, чтобы использовать его.

xrodas 11.12.2020 15:51

Хорошо, я кое-что прочитал в инертной сети, это кажется очень сложным, имейте в виду, что я использовал и адаптировал приведенный выше код, поэтому я не знаю, как «внедрить BatteryService1». Можете ли вы дать мне несколько других советов? Спасибо!

Henry 11.12.2020 21:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите получить доступ к переменной из другого класса, вы должны получить этот класс для класса, который вы хотите использовать.

public partial class MainPage : ContentPage

Если вы все еще хотите, чтобы MainPage производился для ContentPage, вы должны получить класс, который вы хотите (BatteryService1), для ContentPage или наоборот. Так:

public class ContentPage : BatteryService1

Другие вопросы по теме