protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);
            arSceneView = (ArSceneView)FindViewById(Resource.Id.ar_scene_view);

            exampleLayout = ViewRenderable.InvokeBuilder().SetView(this, Resource.Layout.example_layout).Build();
            CompletableFuture.AllOf(exampleLayout).Handle(this);
            arSceneView.Scene.AddOnUpdateListener(this);
            ARLocationPermissionHelper.RequestPermission(this);
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            if (!ARLocationPermissionHelper.HasPermission(this))
            {
                if (!ARLocationPermissionHelper.ShouldShowRequestPermissionRationale(this))
                {
                    // Permission denied with checking "Do not ask again".
                    ARLocationPermissionHelper.LaunchPermissionSettings(this);
                }
                else
                {
                    Toast.MakeText(this, "Camera permission is needed to run this application", ToastLength.Long).Show();
                }

                Finish();
            }

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
        public static Session CreateArSession(Activity activity, bool installRequested)
        {
            Session session = null;

            // if we have the camera permission, create the session
            if (ARLocationPermissionHelper.HasPermission(activity))
            {
                //switch (ArCoreApk.Instance.RequestInstall(activity, !installRequested))
                //{
                //    case "INSTALL_REQUESTED":
                //        return null;
                //    case "INSTALLED":
                //        break;
                //}
                session = new Session(activity);
                // IMPORTANT!!!  ArSceneView needs to use the non-blocking update mode.
                Config config = new Config(session);
                config.SetUpdateMode(Config.UpdateMode.LatestCameraImage);
                session.Configure(config);
            }

            return(session);
        }
        protected override void OnResume()
        {
            base.OnResume();

            if (locationScene != null)
            {
                locationScene.Resume();
            }

            if (arSceneView.Session == null)
            {
                // If the session wasn't created yet, don't resume rendering.
                // This can happen if ARCore needs to be updated or permissions are not granted yet.
                try
                {
                    Session session = CreateArSession(this, installRequested);
                    if (session == null)
                    {
                        installRequested = ARLocationPermissionHelper.HasPermission(this);
                        return;
                    }
                    else
                    {
                        arSceneView.SetupSession(session);
                    }
                }
                catch (UnavailableException e)
                {
                    string message;
                    if (e is UnavailableArcoreNotInstalledException)
                    {
                        message = "Please install ARCore";
                    }
                    else if (e is UnavailableApkTooOldException)
                    {
                        message = "Please update ARCore";
                    }
                    else if (e is UnavailableSdkTooOldException)
                    {
                        message = "Please update this app";
                    }
                    else if (e is UnavailableDeviceNotCompatibleException)
                    {
                        message = "This device does not support AR";
                    }
                    else
                    {
                        message = "Failed to create AR session";
                    }
                    Toast.MakeText(this, message, ToastLength.Long).Show();
                }
            }

            try
            {
                arSceneView.Resume();
            }
            catch (System.Exception ex)
            {
                Finish();
                return;
            }

            if (arSceneView.Session != null)
            {
                ShowLoadingMessage();
            }
        }