Java Can';无法访问webview中的位置
我基于react项目为android创建了一个本机webview。 我想访问我的设备位置,但当我打开应用程序时,它显示一个错误:这是我在android中添加的权限: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"/>
<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/");
}