Android – How to add permission popup?

How to add a popup asking for permission access?

Xamarin

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public void RequestPermissions()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted || ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted)
{
List<string> req = new List<string>();
if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted)
{
req.Add(Manifest.Permission.Camera);
}
if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted)
{
req.Add(Manifest.Permission.RecordAudio);
}
ActivityCompat.RequestPermissions(MainActivity.AppInstance, req.ToArray(), PERMISSIONS_REQUEST_CAPTURE);
}
}
}
public void RequestPermissions() { if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted || ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted) { List<string> req = new List<string>(); if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted) { req.Add(Manifest.Permission.Camera); } if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted) { req.Add(Manifest.Permission.RecordAudio); } ActivityCompat.RequestPermissions(MainActivity.AppInstance, req.ToArray(), PERMISSIONS_REQUEST_CAPTURE); } } }
        public void RequestPermissions()
        {
            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted || ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted)
                {
                    List<string> req = new List<string>();

                    if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.Camera) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.Camera);
                    }

                    if (ContextCompat.CheckSelfPermission(MainActivity.AppInstance, Manifest.Permission.RecordAudio) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.RecordAudio);
                    }

                    ActivityCompat.RequestPermissions(MainActivity.AppInstance, req.ToArray(), PERMISSIONS_REQUEST_CAPTURE);
                }
            }
        }

How to catch event when permission is turned on/off?

Xamarin

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// MainActivity.cs
namespace VAST.Demo.Droid
{
...
private const int PERMISSIONS_REQUEST_CAPTURE = 1;
private const int PERMISSIONS_REQUEST_MEDIA_PROJECTION = 2;
public static MediaProjectionManager mediaProjectionManager = null;
public static Result mediaProjectionResultCode = 0;
public static Intent mediaProjectionResultData = null;
protected override void OnCreate(Bundle savedInstanceState)
{
...
}
protected override void OnResume()
{
base.OnResume();
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted ||
CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted)
{
List<string> req = new List<string>();
if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted)
{
req.Add(Manifest.Permission.Camera);
}
if (CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted)
{
req.Add(Manifest.Permission.RecordAudio);
}
if (CheckSelfPermission(Manifest.Permission.ReadExternalStorage) != Permission.Granted)
{
req.Add(Manifest.Permission.ReadExternalStorage);
}
if (CheckSelfPermission(Manifest.Permission.WriteExternalStorage) != Permission.Granted)
{
req.Add(Manifest.Permission.WriteExternalStorage);
}
RequestPermissions(req.ToArray(), PERMISSIONS_REQUEST_CAPTURE);
}
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
mediaProjectionManager = (MediaProjectionManager)GetSystemService(Context.MediaProjectionService);
if (mediaProjectionResultCode != Result.Ok || mediaProjectionResultData == null)
{
StartActivityForResult(mediaProjectionManager.CreateScreenCaptureIntent(), PERMISSIONS_REQUEST_MEDIA_PROJECTION);
}
}
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == PERMISSIONS_REQUEST_MEDIA_PROJECTION)
{
if (resultCode != Result.Ok)
{
return;
}
mediaProjectionResultCode = resultCode;
mediaProjectionResultData = data;
// DO SOMETHING, START AN ANDROID SERVICE
...
}
base.OnActivityResult(requestCode, resultCode, data);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] global::Android.Content.PM.Permission[] grantResults)
{
switch (requestCode)
{
case PERMISSIONS_REQUEST_CAPTURE:
{
bool allGranted = true;
foreach (Permission res in grantResults)
{
if (res != Permission.Granted)
{
allGranted = false;
break;
}
}
if (allGranted)
{
}
break;
}
default:
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
break;
}
}
}
}
// MainActivity.cs namespace VAST.Demo.Droid { ... private const int PERMISSIONS_REQUEST_CAPTURE = 1; private const int PERMISSIONS_REQUEST_MEDIA_PROJECTION = 2; public static MediaProjectionManager mediaProjectionManager = null; public static Result mediaProjectionResultCode = 0; public static Intent mediaProjectionResultData = null; protected override void OnCreate(Bundle savedInstanceState) { ... } protected override void OnResume() { base.OnResume(); if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted || CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted) { List<string> req = new List<string>(); if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted) { req.Add(Manifest.Permission.Camera); } if (CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted) { req.Add(Manifest.Permission.RecordAudio); } if (CheckSelfPermission(Manifest.Permission.ReadExternalStorage) != Permission.Granted) { req.Add(Manifest.Permission.ReadExternalStorage); } if (CheckSelfPermission(Manifest.Permission.WriteExternalStorage) != Permission.Granted) { req.Add(Manifest.Permission.WriteExternalStorage); } RequestPermissions(req.ToArray(), PERMISSIONS_REQUEST_CAPTURE); } if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { mediaProjectionManager = (MediaProjectionManager)GetSystemService(Context.MediaProjectionService); if (mediaProjectionResultCode != Result.Ok || mediaProjectionResultData == null) { StartActivityForResult(mediaProjectionManager.CreateScreenCaptureIntent(), PERMISSIONS_REQUEST_MEDIA_PROJECTION); } } } } protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { if (requestCode == PERMISSIONS_REQUEST_MEDIA_PROJECTION) { if (resultCode != Result.Ok) { return; } mediaProjectionResultCode = resultCode; mediaProjectionResultData = data; // DO SOMETHING, START AN ANDROID SERVICE ... } base.OnActivityResult(requestCode, resultCode, data); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] global::Android.Content.PM.Permission[] grantResults) { switch (requestCode) { case PERMISSIONS_REQUEST_CAPTURE: { bool allGranted = true; foreach (Permission res in grantResults) { if (res != Permission.Granted) { allGranted = false; break; } } if (allGranted) { } break; } default: Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); break; } } } }
// MainActivity.cs

namespace VAST.Demo.Droid
{

...

        private const int PERMISSIONS_REQUEST_CAPTURE = 1;
        private const int PERMISSIONS_REQUEST_MEDIA_PROJECTION = 2;
        public static MediaProjectionManager mediaProjectionManager = null;
        public static Result mediaProjectionResultCode = 0;
        public static Intent mediaProjectionResultData = null;

        protected override void OnCreate(Bundle savedInstanceState)
        {
...
        }

        protected override void OnResume()
        {
            base.OnResume();

            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted ||
                    CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted)
                {
                    List<string> req = new List<string>();
                    if (CheckSelfPermission(Manifest.Permission.Camera) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.Camera);
                    }
                    if (CheckSelfPermission(Manifest.Permission.RecordAudio) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.RecordAudio);
                    }
                    if (CheckSelfPermission(Manifest.Permission.ReadExternalStorage) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.ReadExternalStorage);
                    }
                    if (CheckSelfPermission(Manifest.Permission.WriteExternalStorage) != Permission.Granted)
                    {
                        req.Add(Manifest.Permission.WriteExternalStorage);
                    }
                    RequestPermissions(req.ToArray(), PERMISSIONS_REQUEST_CAPTURE);
                }

                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    mediaProjectionManager = (MediaProjectionManager)GetSystemService(Context.MediaProjectionService);
                    if (mediaProjectionResultCode != Result.Ok || mediaProjectionResultData == null)
                    {
                        StartActivityForResult(mediaProjectionManager.CreateScreenCaptureIntent(), PERMISSIONS_REQUEST_MEDIA_PROJECTION);
                    }
                }
            }
        }

        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == PERMISSIONS_REQUEST_MEDIA_PROJECTION)
            {
                if (resultCode != Result.Ok)
                {
                    return;
                }

                mediaProjectionResultCode = resultCode;
                mediaProjectionResultData = data;
                
                // DO SOMETHING, START AN ANDROID SERVICE
...
            }

            base.OnActivityResult(requestCode, resultCode, data);
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] global::Android.Content.PM.Permission[] grantResults)
        {

            switch (requestCode)
            {

                case PERMISSIONS_REQUEST_CAPTURE:
                    {
                        bool allGranted = true;
                        foreach (Permission res in grantResults)
                        {
                            if (res != Permission.Granted)
                            {
                                allGranted = false;
                                break;
                            }
                        }
                        if (allGranted)
                        {
                        }
                        break;
                    }

                default:
                    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
                    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
                    break;

            }
        }
    }
}


How to navigate to permission setting screen?

Xamarin

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public void CheckOverlayPermission()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
if (!Android.Provider.Settings.CanDrawOverlays(MainActivity.AppInstance))
{
Intent intent = new Intent(Android.Provider.Settings.ActionManageOverlayPermission);
intent.AddFlags(ActivityFlags.NewTask);
Application.Context.StartActivity(intent);
}
}
}
public void CheckOverlayPermission() { if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { if (!Android.Provider.Settings.CanDrawOverlays(MainActivity.AppInstance)) { Intent intent = new Intent(Android.Provider.Settings.ActionManageOverlayPermission); intent.AddFlags(ActivityFlags.NewTask); Application.Context.StartActivity(intent); } } }
        public void CheckOverlayPermission()
        {
            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                if (!Android.Provider.Settings.CanDrawOverlays(MainActivity.AppInstance))
                {
                    Intent intent = new Intent(Android.Provider.Settings.ActionManageOverlayPermission);
                    intent.AddFlags(ActivityFlags.NewTask);
                    Application.Context.StartActivity(intent);
                }
            }
        }

Be the first to comment

Leave a Reply

Your email address will not be published.


*