As you know, Android is always adding features in its new versions and now the Post Notifications permission has been introduced from Android 13. In this blog, we are going to explore how to request it in our Xamarin.Android projects.
Sample Project
1. Let’s set Android 13.0 as the Target framework.
Open your project settings by right-clicking on your Android project then then selecting -> Properties -> Application. This is required because this permission is only supported in API versions starting with 33, which means Android version 13 or later.
Next, Select Android Manifest -> Set Target Android version.
2. Let’s add the Post Notification permission on Android Manifest
Go to the Android project then right-click -> Properties -> Android Manifest
3. Let’s install the Xamarin.Essentials NuGet Package
We have to initialize Xamarin.Essentials in our Android project, so let’s add this code in the MainActivity.cs file:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
4. Let’s create an Interface in the shared project
For this example, we are going to create the file IPostNotificationPermissionService.cs, and then we’ll implement it in each platform.
Add the following code to the file:
public interface IPostNotificationPermissionService
{
Task<bool> CheckAndRequestPermissions();
}
5. Let’s implement IPostNotificationPermissionService in the Android project
We need to request the Post Notifications permission and show the prompt, but how do we do that? We added Xamarin.Essentials to allow us to extend permissions. You can see the detailed documentation on permissions in Xamarin.Essentials here.
internal class PostNotificationsPermission : BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new List<(string androidPermission, bool isRuntime)>
{
(Manifest.Permission.PostNotifications, true)
}.ToArray();
}
Now we can use PostNotificationsPermission to implement our IPostNotificationPermissionService interface.
public class PostNotificationPermissionService : IPostNotificationPermissionService
{
public async Task<bool> CheckAndRequestPermissions()
{
// Tiramisu is Android v13
if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu)
{
var status = await CheckStatusAsync<PostNotificationsPermission>();
if (status == PermissionStatus.Granted)
{
return true;
}
status = await RequestAsync<PostNotificationsPermission>();
return status == PermissionStatus.Granted;
}
return true;
}
}
6. Let’s inject PostNotificationsPermission
We are going to add the Xamarin Dependency Injection.
[assembly: Dependency(typeof(PostNotificationPermissionService))]
namespace NotificationApp.Droid
{
// Extend Xamarin Essentials
internal class PostNotificationsPermission : BasePlatformPermission
{
// ...
}
// Implementing PostNotificationPermission
public class PostNotificationPermissionService : IPostNotificationPermissionService
{
// ...
}
}
7. Let’s use PostNotificationsPermission
We are going to override the OnAppearing method in the MainPage.xaml.cs
protected override async void OnAppearing()
{
base.OnAppearing();
var service = DependencyService.Get<IPostNotificationPermissionService>();
await service.CheckAndRequestPermissions();
}
8. Let’s run the app
As you can see, that’s all it takes to implement a new Android permission in Xamarin. Easy, right?
All of my code is available on GitHub for you to review. Happy coding!
References