Я работаю над 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");
}
}
}
}
Хорошо, я кое-что прочитал в инертной сети, это кажется очень сложным, имейте в виду, что я использовал и адаптировал приведенный выше код, поэтому я не знаю, как «внедрить BatteryService1». Можете ли вы дать мне несколько других советов? Спасибо!
Если вы хотите получить доступ к переменной из другого класса, вы должны получить этот класс для класса, который вы хотите использовать.
public partial class MainPage : ContentPage
Если вы все еще хотите, чтобы MainPage производился для ContentPage, вы должны получить класс, который вы хотите (BatteryService1), для ContentPage или наоборот. Так:
public class ContentPage : BatteryService1
batt_lev не является статическим, поэтому для доступа к нему необходимо создать экземпляр BatteryService1. Похоже, вы используете внедрение зависимостей, поэтому вам следует внедрить BatteryService1, чтобы использовать его.