Я пытаюсь прослушивать уведомления других приложений и для этой цели попробовал использовать NotificationListenerService
.
Я видел несколько примеров из Xamarin, но, похоже, ничего не работает.
Так как же это делается в MAUI? Как осуществляется доступ к NotificationListenerService
?
Вот мой код из AndroidManifest.xml:
<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android">
<application android:allowBackup = "true" android:icon = "@mipmap/appicon" android:supportsRtl = "true"></application>
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<service android:name = ".NotificationListener"
android:label = "@string/NotificationListener"
android:permission = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name = "android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</manifest>
А здесь вы можете увидеть файл с классом, расширяющим NotificationListenerService:
using Android.Runtime;
using Android.OS;
using Android.Service.Notification;
[Android.Runtime.Register("android/service/notification/NotificationListenerService", DoNotGenerateAcw = true)]
public class NLService : NotificationListenerService
{
public override void OnCreate()
{
base.OnCreate();
Log.Info("start running", "Service Created");
}
public override void OnDestroy()
{
base.OnDestroy();
}
public override IBinder OnBind(Intent intent)
{
return base.OnBind(intent);
}
public override bool OnUnbind(Intent intent)
{
return base.OnUnbind(intent);
}
public override void OnNotificationPosted(StatusBarNotification sbn)
{
base.OnNotificationPosted(sbn);
}
public override void OnNotificationRemoved(StatusBarNotification sbn)
{
base.OnNotificationRemoved(sbn);
}
}
Я объявил службу в AndroidManifest.xml
, как описано здесь: Learn.microsoft.com/en-us/dotnet/api/… в разделе «Примечания». Я все еще получаю CS0246: The type or namespace name could not be found (are you missing a using directive or an assembly reference?)
, так что либо я что-то еще упускаю, либо проблема с MAUI...
Как мы можем воспроизвести эту проблему, не могли бы вы опубликовать этапы воспроизведения этой проблемы?
Я добавил код, который безуспешно пытаюсь запустить. Вы можете попытаться воспроизвести проблему.
Я попробовал код, которым вы поделились, но не смог воспроизвести эту проблему на своей стороне. Не могли бы вы опубликовать базовую демо-версию, чтобы мы могли протестировать ее на своей стороне?
Вот и все изменения, которые я внес в код нового проекта MAUI. Других модификаций кода нет. Я создал новый проект в Visual Studio и добавил файл, содержащий только класс NLService
+ я изменил AndroidManifest.xml, как уже поделился в своем сообщении.
Кстати, я использую .NET 8, если это имеет какое-то значение.
Вы можете использовать следующий код, чтобы перейти к настройкам уведомлений и проверить, предоставлено ли приложению разрешение. Platform.CurrentActivity.StartActivity(new Android.Content.Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
Что ж, решением было обернуть код в директиву препроцессора:
#if ANDROID
#endif
but nothing seems to work
Что пробовали? Где конкретно не работает? Можете ли вы подробнее рассказать о своей проблеме?