Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как мне сделать ответы через шторку уведомлений. MAUI C#

GWan Ученик (92), открыт 4 недели назад
Очень долго бьюсь и не могу реализовать автоматический ответ через шторку уведомлений с заранее заготовленным текстом. Как реализовать?
 

namespace AutoReplyWhatsApp
{
[Service(Exported = false, Label = "ListenNotifications", Permission = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE")]
[IntentFilter(new[] { "android.service.notification.NotificationListenerService" })]
internal class ListenNotifications : NotificationListenerService
{
int count = 0;
public static ListenNotifications NotificationsInstance { get; private set; }
public ListenNotifications()
{
NotificationsInstance = this;
}
public override void OnNotificationPosted(StatusBarNotification? sbn)
{
string packageName = sbn.PackageName;

Console.WriteLine(packageName);
if (packageName == "com.whatsapp")
{
var extras = sbn.Notification.Extras;

string keywords = Preferences.Get("Keywords", string.Empty);
string reply_text = Preferences.Get("Reply_Text", string.Empty);
string replys_count = Preferences.Get("Replys_Count", string.Empty);
string where_replys = Preferences.Get("Where_Replys", string.Empty);

if (!string.IsNullOrEmpty(where_replys))
{

// Разделяем строку на массив слов по запятой, удаляем лишние пробелы и приводим к нижнему регистру
HashSet<string> where_replys_hash = new HashSet<string>(
where_replys.Split(',')
.Select(keyword => keyword.Trim().ToLower()), // Приводим каждое ключевое слово к нижнему регистру
StringComparer.OrdinalIgnoreCase // Игнорируем регистр при проверке наличия
);

HashSet<string> keywords_hash = new HashSet<string>(
keywords.Split(',')
.Select(keyword => keyword.Trim().ToLower()), // Приводим каждое ключевое слово к нижнему регистру
StringComparer.OrdinalIgnoreCase // Игнорируем регистр при проверке наличия
);

// Приводим текст к нижнему регистру для сравнения
string? title = extras.GetString(Notification.ExtraTitle).ToLower();
string? text = extras.GetString(Notification.ExtraText).ToLower();

// Проверяем каждое слово
foreach (var i in where_replys_hash)
{
if (title.Contains(i)) // Здесь не нужно приводить keyword к нижнему регистру, так как он уже в нижнем регистре
{
foreach (var j in keywords_hash)
{
if (text.Contains(j))
{
Log.Info("NotificationListener", $"Ответ на {packageName}: {title} - {text}");
AutoReply(reply_text, sbn);
}
}
}
}
}
}
}
0 ответов
Похожие вопросы