#c# #xamarin #xamarin.forms #background-service
#c# #xamarin #xamarin.forms #фоновая служба
Вопрос:
у меня есть базовое приложение xamarin, которое считывает из буфера обмена и изменяет текст, а затем снова устанавливает его в буфер обмена. он отлично работает, когда пользователь находится в приложении. но когда пользователь нажимает кнопку «Домой», это останавливается. итак, я добавил свой метод в OnSleep() и включил фоновую выборку на IOS и Android, но он не работает на обоих.
MainPage.cs:
private void clipboardCheckBox_CheckedChanged(object sender, CheckedChangedEventArgs e)
{
if (clipboardCheckBox.IsChecked)
{
MessagingCenter.Send<string>("1", "clipboardService");
}
else
{
MessagingCenter.Send<string>("0", "clipboardService");
}
}
App.cs:
protected override void OnSleep()
{
MessagingCenter.Subscribe<string>(this, "clipboardService", (value) =>
{
if (value.Equals("1"))
{
Clipboard.ClipboardContentChanged = async (o, e) =>
{
var text = await Clipboard.GetTextAsync();
if (text.Contains("@"))
{
await Clipboard.SetTextAsync(text.Trim('@'));
}
};
}
});
}
Комментарии:
1. что вы ожидаете от этого? Если ваше приложение работает в фоновом режиме, ожидаете ли вы, что оно получит доступ к буферу обмена активного приложения?
2. да, он должен выполняться до тех пор, пока флажок установлен даже в фоновом режиме.
3. Вы могли бы сделать это в Android, но я не думаю, что это возможно в iOS.
4. воспроизведение музыки в фоновом режиме — это особый вариант использования, для которого они создают специальные API. Разрешить приложению вмешиваться в обычную работу буфера обмена другого приложения — это совершенно другое.
5. потому что, если бы я мог сделать то, что вы предлагаете, я мог бы написать приложение, которое превращает каждый элемент буфера обмена в ссылку на вредоносное ПО, или загружать каждый элемент буфера обмена на сервер и собирать данные без ведома пользователя