Hello.
For Android 12 and above, apps have to ask bluetooth permission explicitly to be able to scan and print.
I didn't want to create a PR, i don't want to change your sample, but the code below can be added to help developers about asking permissions for bluetooth. You guys can add this in a suitable place in the demo if you want.
1st step:
Install Xamarin.Essentials to be able to use Permissions API, and make sure you are targeting at least Android 12.
2nd step:
In shared project, create an interface like below
public interface IPlatformHelpers
{
Task<PermissionStatus> CheckAndRequestBluetoothPermissions();
}
3rd step:
In Android project, create a class like below (Don't forget to change namespace , YourAppName to your app name.)
[assembly: Dependency(typeof(PlatformHelpers))]
namespace YourAppName.Droid
{
public class PlatformHelpers : IPlatformHelpers
{
public async Task<PermissionStatus> CheckAndRequestBluetoothPermissions()
{
PermissionStatus status;
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.S)
{
status = await Permissions.CheckStatusAsync<BluetoothSPermission>();
if (status == PermissionStatus.Granted)
return status;
status = await Permissions.RequestAsync<BluetoothSPermission>();
}
else
{
status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
if (status == PermissionStatus.Granted)
return status;
status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
}
return status;
}
}
public class BluetoothSPermission : Xamarin.Essentials.Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)>
{
(Android.Manifest.Permission.BluetoothScan, true),
(Android.Manifest.Permission.BluetoothConnect, true)
}.ToArray();
}
}
4th step:
Make sure you added this lines to your Android app manifest
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
5th step:
Before scanning for bluetooth devices or printing, check and ask for the bluetooth permission
var permissionResult = await DependencyService.Get<IPlatformHelpers>().CheckAndRequestBluetoothPermissions();
if (permissionResult != PermissionStatus.Granted)
{
}
You can scan , connect and print after the app has the permission granted.
I just needed to do this modifications to my app because of the changes for bluetooth permissions for Android 12 and above.
Hope this helps people like me.