C# Toast通知在XF Android 8.0/1上不起作用
我有一个跨平台的XF应用程序 我正在使用Toast.Forms发送本地应用程序通知,该插件在iOS和Android上都能工作。 在iOS上它工作得非常好,但在Android上它只适用于低于7.1的版本,在oreo 8.0或8.1(>API 26)上它不再工作了 这是我的吐司课:C# Toast通知在XF Android 8.0/1上不起作用,c#,xamarin.forms,notifications,xamarin.android,toast,C#,Xamarin.forms,Notifications,Xamarin.android,Toast,我有一个跨平台的XF应用程序 我正在使用Toast.Forms发送本地应用程序通知,该插件在iOS和Android上都能工作。 在iOS上它工作得非常好,但在Android上它只适用于低于7.1的版本,在oreo 8.0或8.1(>API 26)上它不再工作了 这是我的吐司课: internal class ToastService : IToastService { private readonly IAppDeviceDependency _DeviceDependency;
internal class ToastService : IToastService
{
private readonly IAppDeviceDependency _DeviceDependency;
public ToastService([NotNull] IAppDeviceDependency deviceDependency)
{
_DeviceDependency = deviceDependency ?? throw new ArgumentNullException(nameof(deviceDependency));
}
public void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
{
DeviceToastProvider.ShowToast(title, description, isClickable, clearFromHistory);
}
private IToastProvider DeviceToastProvider => _DeviceDependency.Get<IToastProvider>();
}
内部类ToastService:IToastService
{
专用只读IAppDeviceDependence _DeviceDependence;
公共ToastService([NotNull]IAppDeviceDependency设备Dependency)
{
_DeviceDependency=DeviceDependency??抛出新的ArgumentNullException(nameof(DeviceDependency));
}
public void showtoos(字符串标题、字符串描述、bool isClickable、bool clearFromHistory)
{
DeviceToastProvider.ShowToast(标题、描述、可点击、clearFromHistory);
}
私有IToastProvider DeviceToastProvider=>\u deviceDependence.Get();
}
Android toast提供商:
[assembly: Dependency(typeof(AndroidToastProvider))]
namespace MyApp.Droid.Providers
{
public class AndroidToastProvider : IToastProvider
{
public async void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
{
var notificator = DependencyService.Get<IToastNotificator>();
await notificator.Notify(new NotificationOptions
{
Title = title,
Description = description,
IsClickable = isClickable,
ClearFromHistory = clearFromHistory
});
}
}
}
[程序集:依赖项(typeof(androidtoasprovider))]
命名空间MyApp.Droid.Providers
{
公共类AndroidToastProvider:IToastProvider
{
公共异步void showtoos(字符串标题、字符串描述、bool isClickable、bool clearFromHistory)
{
var notificator=DependencyService.Get();
等待通知者。通知(新通知选项)
{
头衔,
描述=描述,
IsClickable=IsClickable,
ClearFromHistory=ClearFromHistory
});
}
}
}
苹果吐司供应商
[assembly: Dependency(typeof(AppleToastProvider))]
namespace MyApp.iOS.Providers
{
public class AppleToastProvider : IToastProvider
{
public async void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
{
var notificator = DependencyService.Get<IToastNotificator>();
await notificator.Notify(new NotificationOptions
{
Title = title,
Description = description,
IsClickable = isClickable,
ClearFromHistory = clearFromHistory
});
}
}
}
[程序集:依赖项(typeof(AppleToastProvider))]
命名空间MyApp.iOS.Providers
{
公共类AppleToastProvider:IToastProvider
{
公共异步void showtoos(字符串标题、字符串描述、bool isClickable、bool clearFromHistory)
{
var notificator=DependencyService.Get();
等待通知者。通知(新通知选项)
{
头衔,
描述=描述,
IsClickable=IsClickable,
ClearFromHistory=ClearFromHistory
});
}
}
}
Android 8要求通知具有分配给它们的频道以显示(请参阅此处的更多信息:)。如果您的插件不支持,您可以要求作者以适当的方式更新它,或者您可以使用本机API创建自己的代码。找到了问题的解决方案。显然,我是使用Android 7.1版编译的,它不支持Android Oreo 8.0的新通知通道。现在我正在使用安卓8.1(Oreo)进行编译,我已经将Toast.plugin更新到最新版本,它在所有低于安卓8.1的版本上都运行良好
关于这个问题的更多信息可以在这里找到:很遗憾,我不认为Toast插件已更新为支持Android 8.0,因此我必须纠正Android 8.0通知的特殊情况,正如您所提到的。我很可能会创建一个通知通道。非常感谢。