而在android中拒绝相机权限时,它不会再询问

时间:2019-02-19 12:42:43

标签: xamarin

第一次申请照相机的许可,如果我们拒绝许可,它将不再询问我们是否允许其正常工作?

            var scanPage = new ZXingScannerPage();
            var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
            if (cameraStatus != PermissionStatus.Granted)
            {
                var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera });
                cameraStatus = results[Permission.Camera];
                if (cameraStatus == PermissionStatus.Granted)
                {

                    // Navigate to our scanner page
                    await Navigation.PushAsync(scanPage);
                    scanPage.OnScanResult += (result) =>
                    {
                        Device.BeginInvokeOnMainThread(async () =>
                        {
                            await Navigation.PopAsync();
                            txtbarcode.Text = result.Text;
                        });
                    };
                }
                else if (cameraStatus == PermissionStatus.Unknown)
                {
                    await Navigation.PushAsync(scanPage);
                    scanPage.OnScanResult += (result) =>
                    {
                        Device.BeginInvokeOnMainThread(async () =>
                        {
                            await Navigation.PopAsync();
                            txtbarcode.Text = result.Text;
                        });
                    };
                }

如果我们拒绝相机许可,则在打开相机之前,它会再次询问,直到我们允许该许可为止。

1 个答案:

答案 0 :(得分:0)

我写了一个关于这个的演示。

https://github.com/851265601/CheckPermissionDemo

这是此演示的GIF。

enter image description here

每次使用相机功能时是否都检查了许可?在此演示中,当我单击按钮时,它将检查权限,然后将结果提供给用户,如果不授予权限,它仍然会像下面的代码一样询问权限。

 async void ButtonPermission_OnClicked(object sender, EventArgs e)
    {
        if (busy)
            return;

        busy = true;
        ((Button)sender).IsEnabled = false;

        var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);


        await DisplayAlert("Pre - Results", status.ToString(), "OK");

        if (status != PermissionStatus.Granted)
        {
            status = await Utils.CheckPermissions(Permission.Camera);



            await DisplayAlert("Results", status.ToString(), "OK");

        }

        busy = false;
        ((Button)sender).IsEnabled = true;
    }


}

出现DisplayAlert时,MainApplication用于不同的生命周期

namespace CheckPermissionDemo.Droid
{
    //You can specify additional application information in this attribute
    [Application]
    public class MainApplication : Application, Application.IActivityLifecycleCallbacks
{
    public MainApplication(IntPtr handle, JniHandleOwnership transer)
      : base(handle, transer)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
        RegisterActivityLifecycleCallbacks(this);
        //A great place to initialize Xamarin.Insights and Dependency Services!
    }

    public override void OnTerminate()
    {
        base.OnTerminate();
        UnregisterActivityLifecycleCallbacks(this);
    }

    public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivityDestroyed(Activity activity)
    {
    }

    public void OnActivityPaused(Activity activity)
    {
    }

    public void OnActivityResumed(Activity activity)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
    {
    }

    public void OnActivityStarted(Activity activity)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivityStopped(Activity activity)
    {
    }
}
}