Xamarin.forms 请求照相机权限xamarin表单

Xamarin.forms 请求照相机权限xamarin表单,xamarin.forms,xamarin.android,Xamarin.forms,Xamarin.android,我有一个应用程序需要摄像头的权限,这是很好的实施,但要求在主屏幕(飞溅)的权限。我希望在登录后或在特定页面上显示(这可能吗?)。由于我可以在IOS上实现同样的功能,我非常感谢您的帮助,祝您度过愉快的一天 谢谢你的帮助。 这是我的密码 MainActivity.cs const int requestCameraId = 0; const int requestStorageId = 1; const int requestId = 2; readonly stri

我有一个应用程序需要摄像头的权限,这是很好的实施,但要求在主屏幕(飞溅)的权限。我希望在登录后或在特定页面上显示(这可能吗?)。由于我可以在IOS上实现同样的功能,我非常感谢您的帮助,祝您度过愉快的一天

谢谢你的帮助。

这是我的密码

MainActivity.cs

    const int requestCameraId = 0;
    const int requestStorageId = 1;
    const int requestId = 2;
    readonly string[] permissions =
    {
        Android.Manifest.Permission.Camera,
        Android.Manifest.Permission.ReadExternalStorage,
        Android.Manifest.Permission.WriteExternalStorage,
        Android.Manifest.Permission.Internet,
        Android.Manifest.Permission.ForegroundService,
        Android.Manifest.Permission.RequestCompanionUseDataInBackground,
        Android.Manifest.Permission.RequestCompanionRunInBackground,
        Android.Manifest.Permission.StatusBar,
        Android.Manifest.Permission.Vibrate,
        Android.Manifest.Permission.Flashlight
    };

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        switch (requestCode)
        {
            case requestCameraId:
                {
                    if (grantResults[0] == (int)Android.Content.PM.Permission.Granted)
                    {
                        Toast.MakeText(this, "Permiso concedido para la camara", ToastLength.Short).Show();

                    }
                    else
                    {
                        //Permission Denied :(
                        Toast.MakeText(this, "Permiso denegado para la camara", ToastLength.Short).Show();

                    }
                }
                break;
            case requestStorageId:
                {
                    if (grantResults[0] == (int)Android.Content.PM.Permission.Granted)
                    {
                        Toast.MakeText(this, "Permiso concedido para el almacenamiento", ToastLength.Short).Show();

                    }
                    else
                    {
                        //Permission Denied :(
                        Toast.MakeText(this, "Permiso denegado para el almacenamiento", ToastLength.Short).Show();

                    }
                }
                break;
        }
    }
    async Task GetCameraPermissionAsync()
    {
        const string permission = Manifest.Permission.Camera;

        if (CheckSelfPermission(permission) == (int)Android.Content.PM.Permission.Granted)
        {
            //TODO change the message to show the permissions name
            Toast.MakeText(this, "Permisos para la camara listos", ToastLength.Short).Show();
            return;
        }

        if (ShouldShowRequestPermissionRationale(permission))
        {
            //set alert for executing the task
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.SetTitle("Permisos necesarios");
            alert.SetMessage("La aplicación necesita acceder a la camara para tomar una fotografía del trabajo terminado");
            alert.SetPositiveButton("Conceder permiso", (senderAlert, args) =>
            {
                RequestPermissions(permissions, requestCameraId);
            });

            alert.SetNegativeButton("Cancelar", (senderAlert, args) =>
            {
                Toast.MakeText(this, "Cancelado", ToastLength.Short).Show();
            });

            Dialog dialog = alert.Create();
            dialog.Show();
            return;
        }
    }
    async Task GetStoragePermissionAsync()
    {
        const string permission = Manifest.Permission.ReadExternalStorage;

        if (CheckSelfPermission(permission) == (int)Android.Content.PM.Permission.Granted)
        {
            //TODO change the message to show the permissions name
            Toast.MakeText(this, "Permisos para leer carpetas listos", ToastLength.Short).Show();
            return;
        }

        if (ShouldShowRequestPermissionRationale(permission))
        {
            //set alert for executing the task
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.SetTitle("Permisos necesarios");
            alert.SetMessage("La aplicación necesita acceder a sus archivos para subir una imagen con el trabajo terminado");
            alert.SetPositiveButton("Conceder permiso", (senderAlert, args) =>
            {
                RequestPermissions(permissions, requestStorageId);
            });

            alert.SetNegativeButton("Cancelar", (senderAlert, args) =>
            {
                Toast.MakeText(this, "Cancelado", ToastLength.Short).Show();
            });

            Dialog dialog = alert.Create();
            dialog.Show();
            return;
        }
    }

    async Task GetPermissionsAsync()
    {
        await GetCameraPermissionAsync();
        await GetStoragePermissionAsync();
        RequestPermissions(permissions, requestId);

    }
    async Task TryToGetPermissions()
    {
        if ((int)Build.VERSION.SdkInt >= 23)
        {
            await GetPermissionsAsync();
            return;
        }
    }
    protected async  override void OnCreate(Bundle savedInstanceState)
    {
        await TryToGetPermissions();
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // RequestPermissions(permissions, requestId);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
        Xamarin.Forms.Application.Current.On<Xamarin.Forms.PlatformConfiguration.Android>().UseWindowSoftInputModeAdjust(WindowSoftInputModeAdjust.Resize);
        CreateNotificationFromIntent(Intent);

        //notificationServiceIntent = new Intent(this.BaseContext, typeof(PDANotificationService));
        //StartService(notificationServiceIntent);
        WireUpLongRunningTask();
        var message = new StartLongRunningTaskMessage();
        MessagingCenter.Send(message, "StartLongRunningTaskMessage");
    }
const int requestCameraId=0;
const int requestStorageId=1;
const int requestId=2;
只读字符串[]权限=
{
Android.Manifest.Permission.Camera,
Android.Manifest.Permission.ReadExternalStorage,
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.Internet,
Android.Manifest.Permission.ForegroundService,
Android.Manifest.Permission.RequestCompanyUseDataInBackground,
Android.Manifest.Permission.RequestCompanyRunInBackground,
Android.Manifest.Permission.StatusBar,
Android.Manifest.Permission.Vibrate,
Android.Manifest.Permission.Flashlight
};
public override void OnRequestPermissionsResult(int-requestCode,string[]permissions,[GeneratedEnum]Android.Content.PM.Permission[]grantResults)
{
开关(请求代码)
{
案件请求者:
{
如果(grantResults[0]=(int)Android.Content.PM.Permission.grated)
{
Toast.MakeText(这个“Permiso concedido para la camara”,ToastLength.Short).Show();
}
其他的
{
//拒绝许可:(
Toast.MakeText(这个“Permiso denegado para la camara”,ToastLength.Short).Show();
}
}
打破
案例请求存储ID:
{
如果(grantResults[0]=(int)Android.Content.PM.Permission.grated)
{
Toast.MakeText(这个“Permiso concedido para el-almacenaminto”,ToastLength.Short).Show();
}
其他的
{
//拒绝许可:(
Toast.MakeText(这是“Permiso denegado para el Almacenaminto”,ToastLength.Short).Show();
}
}
打破
}
}
异步任务GetCameraPermissionAsync()
{
const string permission=Manifest.permission.Camera;
if(CheckSelfPermission(permission)==(int)Android.Content.PM.permission.grated)
{
//TODO更改消息以显示权限名称
Toast.MakeText(这是“Permisos para la camara listos”,ToastLength.Short).Show();
返回;
}
如果(应显示请求许可理由(许可))
{
//为执行任务设置警报
AlertDialog.Builder alert=新建AlertDialog.Builder(此);
警报。设置标题(“必要许可”);
alert.SetMessage(“我们必须加入我们的团队,为我们的团队服务”);
警报。设置正按钮(“承认者许可证”,(senderAlert,args)=>
{
RequestPermissions(权限、requestCameraId);
});
alert.SetNegativeButton(“取消”,senderAlert,args)=>
{
Toast.MakeText(这是“Cancelado”,ToastLength.Short).Show();
});
Dialog=alert.Create();
dialog.Show();
返回;
}
}
异步任务GetStoragePermissionAsync()
{
const string permission=Manifest.permission.ReadExternalStorage;
if(CheckSelfPermission(permission)==(int)Android.Content.PM.permission.grated)
{
//TODO更改消息以显示权限名称
Toast.MakeText(这是“Permisos para leer地毯列表”,ToastLength.Short).Show();
返回;
}
如果(应显示请求许可理由(许可))
{
//为执行任务设置警报
AlertDialog.Builder alert=新建AlertDialog.Builder(此);
警报。设置标题(“必要许可”);
alert.SetMessage(“需要加入一个新的档案,以便在终端上查看图像”);
警报。设置正按钮(“承认者许可证”,(senderAlert,args)=>
{
RequestPermissions(权限、requestStorageId);
});
alert.SetNegativeButton(“取消”,senderAlert,args)=>
{
Toast.MakeText(这是“Cancelado”,ToastLength.Short).Show();
});
Dialog=alert.Create();
dialog.Show();
返回;
}
}
异步任务GetPermissionsAsync()
{
等待GetCameraPermissionAsync();
等待GetStoragePermissionAsync();
请求权限(权限、请求ID);
}
异步任务TryToGetPermissions()
{
如果((int)Build.VERSION.SdkInt>=23)
{
等待GetPermissionsAsync();
返回;
}
}
创建时受保护的异步重写void(Bundle savedInstanceState)
{
等待TryToGetPermissions();
TabLayoutResource=Resource.Layout.Tabbar;
ToolbarResource=Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
//请求权限(权限、请求ID);
全局::Xamarin.Forms.Forms.Init(这个,savedInstanceState);
加载应用程序(新应用程序());
Xamarin.Forms.Application.Current.On().UseWindowsOfInputModeAdjust(WindowsOfInputModeAdjust.Resize);
CreateNotificationFromIntent(Intent);
//通知
if (CheckSelfPermission(Manifest.Permission.Camera) != (int)Permission.Granted)
{
    //request permission
}else
{
    //call camera
}