Geolocation Geoloaction Access拒绝显示弹出窗口,即使在Ar.js中的浏览器中授予了权限

Geolocation Geoloaction Access拒绝显示弹出窗口,即使在Ar.js中的浏览器中授予了权限,geolocation,gps,android-webview,aframe,ar.js,Geolocation,Gps,Android Webview,Aframe,Ar.js,我试图在android webview中使用Ar.js,在授予位置和相机权限后,我得到一个对话框,上面说无法访问地理位置 当这个对话框出现时,我在日志中得到一个错误,说error(1):User denied Geolocation。以下是完整的日志: 07-05 13:33:46.355 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(0)] "The connection used to load resources

我试图在android webview中使用Ar.js,在授予位置和相机权限后,我得到一个对话框,上面说无法访问地理位置

当这个对话框出现时,我在日志中得到一个错误,说
error(1):User denied Geolocation
。以下是完整的日志:

07-05 13:33:46.355 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(0)] "The connection used to load resources from https://www.zamit.one used TLS 1.0 or TLS 1.1, which are deprecated and will be disabled in the future. Once disabled, users will be prevented from loading these resources. The server should enable TLS 1.2 or later. See https://www.chromestatus.com/feature/5654791610957824 for more information.", source: https://www.zamit.one/markerless.html (0)
07-05 13:33:47.176 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(140)] "No DPDB device match.", source: https://aframe.io/releases/0.9.2/aframe.min.js (140)
07-05 13:33:47.176 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(140)] "Failed to recalculate device parameters.", source: https://aframe.io/releases/0.9.2/aframe.min.js (140)
07-05 13:33:47.183 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(140)] "Using fallback Android device measurements.", source: https://aframe.io/releases/0.9.2/aframe.min.js (140)
07-05 13:33:47.399 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(259)] "document.registerElement is deprecated and will be removed in M73, around March 2019. Please use window.customElements.define instead. See https://www.chromestatus.com/features/4642138092470272 for more details.", source: https://aframe.io/releases/0.9.2/aframe.min.js (259)
07-05 13:33:47.520 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(353)] "A-Frame Version: 0.9.2 (Date 2019-05-06, Commit #f57a1fa)", source: https://aframe.io/releases/0.9.2/aframe.min.js (353)
07-05 13:33:47.520 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(353)] "three Version (https://github.com/supermedium/three.js):", source: https://aframe.io/releases/0.9.2/aframe.min.js (353)
07-05 13:33:47.521 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(353)] "WebVR Polyfill Version:", source: https://aframe.io/releases/0.9.2/aframe.min.js (353)
07-05 13:33:47.806 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(140)] "No DPDB device match.", source: https://aframe.io/releases/0.9.2/aframe.min.js (140)
07-05 13:33:47.807 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(140)] "Failed to recalculate device parameters.", source: https://aframe.io/releases/0.9.2/aframe.min.js (140)
07-05 13:33:48.429 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(95)] "THREE.WebGLRenderer", source: https://aframe.io/releases/0.9.2/aframe.min.js (95)
07-05 13:33:49.551 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(4120)] "ERROR(1): User denied Geolocation", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (4120)
07-05 13:33:53.448 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2612)] "AR.js", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2612)
07-05 13:33:54.930 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2)] "[warning] *** Camera Parameter resized from 640, 480. ***", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2)
07-05 13:33:55.161 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2)] "[info] Allocated videoFrameSize 307200", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2)
07-05 13:33:55.175 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2)] "[info] Pattern detection mode set to 1.", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2)
07-05 13:33:55.189 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2)] "[info] Pattern ratio size set to 0.500000.", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2)
07-05 13:33:55.189 32209-32209/com.example.sample I/chromium: [INFO:CONSOLE(2)] "[info] Labeling mode set to 1", source: https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js (2)
我已经在android chrome中检查了位置权限,并且位置权限在那里处于活动状态

在这个弹出窗口之后,我得到另一个弹出窗口(即使我使用的是Android)作为

由于这个原因,我在放置A-frame的球体组件时遇到了问题,这也是Ar.js的启动问题。请帮帮我

这是我的密码

HTML


我在回答我自己的问题,以便它能帮助将来有同样问题的任何人

罪犯在不同的位置使用setWebChromeClient()两次,如下所示

   webView.setWebChromeClient(new WebChromeClient() {
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }
    });

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
            final String[] requestedResources;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                requestedResources = request.getResources();
                for (String r : requestedResources) {
                    if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                            request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
                        }
                        break;
                    }
                }
            }

        }
    });


}
将其更改为单个setWebChromeClient()(如下所示),第一个弹出窗口消失。第二个弹出窗口现在只在安装应用程序时出现一次,到目前为止不会造成任何问题。(如果将来出现,我将更新答案)


设备定向确实需要不同的权限,我认为您应该尝试使用最新的A-Frame版本(1.0.4),该版本包含一个授权弹出窗口。@StéphaneAlbanese用于回复,但即使使用A-Frame版本(1.0.4)和此处的链接,问题仍然存在,事实上添加了
设备定向权限ui=“enabled:true”
未执行任何操作
public class MainActivity extends AppCompatActivity {


    private static final int REQUEST_FINE_LOCATION = 1;


    WebView webView;
    MainActivity mainActivity ;
    private Context mContext;
    
    public static final int MY_PERMISSIONS_REQUEST_ACCESS_LOCATION = 200;
    public static final int MY_PERMISSIONS_REQUEST_ACCESS_CAMERA = 1001;
    
    double bearing;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_main);
        

        webView = (WebView)findViewById(R.id.mybrowser);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new MyWebLogger());

        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(false);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.getSettings().setDatabaseEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setGeolocationEnabled(true);

        webView.getSettings().setGeolocationDatabasePath(getFilesDir().getPath());
        mContext = this;
        if (Build.VERSION.SDK_INT > 17) {
            webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
        }


        
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

            Log.i("MainActivity", "GPS is Enabled in your devide");
            if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
                    PackageManager.PERMISSION_GRANTED &&
                    ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
                            PackageManager.PERMISSION_GRANTED &&
                    ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED ) {


                webView.loadUrl("https://myurl/markerless.html");


            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1001);
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 2);
            }


        }else{
            showGPSDisabledAlertToUser();

        }


        webView.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.i("Mainactivity","Inside shouldOverride");
                webView.loadUrl(url);
                return true;
            }



        });

        webView.setWebChromeClient(new WebChromeClient() {
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false);
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onPermissionRequest(final PermissionRequest request) {
                final String[] requestedResources;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                    requestedResources = request.getResources();
                    for (String r : requestedResources) {
                        if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
                            }
                            break;
                        }
                    }
                }

            }
        });


    }



    @Override
    public void onResume() {
        super.onResume();
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

            Log.i("MainActivity", "GPS is Enabled in your devide");
            if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
                    PackageManager.PERMISSION_GRANTED &&
                    ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
                            PackageManager.PERMISSION_GRANTED) {

                webView.loadUrl("https://myurl/markerless.html");

            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 2);
            }

        }

    }




    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        Log.i("MainActivity", "Inside onRequestPermissionResult "+ requestCode);
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_ACCESS_LOCATION: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted
                    Log.i("MainActivity","User Allowed permissions");
                    webView.loadUrl("https://myurl/markerless.html");



                } else {


                    Log.i("MainActivity","User Denied Permission 0()");
                }

            }
            break;
            case MY_PERMISSIONS_REQUEST_ACCESS_CAMERA: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //Do your stuff
                    Log.i("MainActivity","User Allowed permissions Camera");
                } else {

                }
            }
            break;

        }
    }




    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
                .setCancelable(false)
                .setPositiveButton("Goto Settings Page To Enable GPS",
                        new DialogInterface.OnClickListener(){
                            public void onClick(DialogInterface dialog, int id){
                                Intent callGPSSettingIntent = new Intent(
                                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                startActivity(callGPSSettingIntent);
                            }
                        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog, int id){
                        dialog.cancel();
                    }
                });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }

}
   webView.setWebChromeClient(new WebChromeClient() {
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }
    });

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
            final String[] requestedResources;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                requestedResources = request.getResources();
                for (String r : requestedResources) {
                    if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                            request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
                        }
                        break;
                    }
                }
            }

        }
    });


}
webView.setWebChromeClient(new WebChromeClient() {
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false);
            }

            @Override
            public void onPermissionRequest(final PermissionRequest request) {
                final String[] requestedResources;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                    requestedResources = request.getResources();
                    for (String r : requestedResources) {
                        if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
                            }
                            break;
                        }
                    }
                }

            }
        });


    }