Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法访问webview中的位置_Java_Android - Fatal编程技术网

Java Can';无法访问webview中的位置

Java Can';无法访问webview中的位置,java,android,Java,Android,我基于react项目为android创建了一个本机webview。 我想访问我的设备位置,但当我打开应用程序时,它显示一个错误:这是我在android中添加的权限: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

我基于react项目为android创建了一个本机webview。 我想访问我的设备位置,但当我打开应用程序时,它显示一个错误:这是我在android中添加的权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
当我打开应用程序时,它会显示
警报
消息 下面是我的java代码:

if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            AlertDialog .Builder alertDialog;
            alertDialog = new AlertDialog.Builder(MainActivity.this);

            alertDialog.setMessage("permite accesul la locatie")
                    .setTitle("eroare locatie");
            AlertDialog mesajEroare = alertDialog.create();
            mesajEroare.show();


        } else {
            mySite = (WebView)findViewById(R.id.site);
            mySite.getSettings().setGeolocationDatabasePath( MainActivity.this.getFilesDir().getPath() );
            mySite.setWebChromeClient(new WebChromeClient() {
                public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                    callback.invoke(origin, true, false);
                }
            });
            WebSettings setari = mySite.getSettings();
            setari.setJavaScriptEnabled(true);
            setari.setDomStorageEnabled(true);
            setari.setDatabaseEnabled(true);
            setari.setDatabasePath("/data/data/" + mySite.getContext().getPackageName() + "/databases/");
            setari.setGeolocationEnabled(true);
            mySite.loadUrl("http://10.0.2.2:3000/");


        }
我不知道哪里出了问题!
谢谢大家!

我只是猜测,但我认为没有得到许可。我认为您需要在
ongeLocationPermissionsShowPrompt
函数中自己显示权限提示,然后使用结果调用回调方法。您可以在系统设置中检查应用程序的权限状态。您需要在运行时请求权限。查看这个帖子@Jannik你能展示代码吗?我不能展示代码,因为我从来没有写过。但是看看Ignacio提到的问题。那里的答案也适用于你。您只需要稍微修改一下onRequestPermissionsResult。您不需要调用
locationManager.requestLocationUpdates
而是调用在
onGeolocationPermissionsShowPrompt
中收到的回调。
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            AlertDialog .Builder alertDialog;
            alertDialog = new AlertDialog.Builder(MainActivity.this);

            alertDialog.setMessage("permite accesul la locatie")
                    .setTitle("eroare locatie");
            AlertDialog mesajEroare = alertDialog.create();
            mesajEroare.show();


        } else {
            mySite = (WebView)findViewById(R.id.site);
            mySite.getSettings().setGeolocationDatabasePath( MainActivity.this.getFilesDir().getPath() );
            mySite.setWebChromeClient(new WebChromeClient() {
                public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                    callback.invoke(origin, true, false);
                }
            });
            WebSettings setari = mySite.getSettings();
            setari.setJavaScriptEnabled(true);
            setari.setDomStorageEnabled(true);
            setari.setDatabaseEnabled(true);
            setari.setDatabasePath("/data/data/" + mySite.getContext().getPackageName() + "/databases/");
            setari.setGeolocationEnabled(true);
            mySite.loadUrl("http://10.0.2.2:3000/");


        }