Toast通知不适用于XF Android 8.0 / 1

时间:2018-11-12 09:04:12

标签: 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;

    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>();
}

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
        });
    }
}
}

苹果吐司提供商

[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
        });
    }
}
}

2 个答案:

答案 0 :(得分:1)

Android 8要求在通知中显示分配给他们的频道(请在此处查看更多信息:https://developer.android.com/guide/topics/ui/notifiers/notifications)。如果您的插件不支持,则可以要求作者以适当的方式对其进行更新,也可以使用本机API创建自己的代码。

答案 1 :(得分:0)

找到了解决问题的方法。显然我正在使用Android版本7.1进行编译,该版本不支持Android Oreo 8.0的新通知通道。现在,我正在使用Android 8.1(Oreo)进行编译,我已经将Toast.plugin更新为最新版本,并且在所有低于Android 8.1的版本上都可以正常工作

有关此问题的更多信息,请参见:https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/notifications/local-notifications