javascript - 在 webview 中获得地理定位权限后 GPS 未打开?
问题描述
帮助!我完全被我的 webview 应用程序困住了。我的 webview 应用程序中的网站页面显示了带有用户当前位置的 Google 地图。但我不知道为什么我的代码不能正常工作?当用户进入应用程序时,我的 webview 请求地理定位权限,但是在授予地理定位权限后,GPS 没有打开,G-maps 什么也没有显示?在 app-info >> 权限 >> 位置是允许的。在 chrome 浏览器中,这一切都很完美,但在我的 webview 应用程序中没有任何反应,
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ActivityCompat.requestPermissions(
this, arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
), 0
)
val UrlWindow: WebView = findViewById(R.id.UrlWindow)
UrlWindow.webViewClient = object : WebViewClient (){
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
if (url != null) {
view?.loadUrl(url)
}
return true
}
}
UrlWindow.settings.javaScriptCanOpenWindowsAutomatically = true
UrlWindow.settings.databaseEnabled = true
UrlWindow.setWebChromeClient(object : WebChromeClient() {
override fun onGeolocationPermissionsShowPrompt(
origin: String,
callback: GeolocationPermissions.Callback
) {
callback.invoke(origin, true, false)
}
})
UrlWindow.settings.javaScriptEnabled = true
UrlWindow.settings.setGeolocationEnabled(true)
UrlWindow.loadUrl("https://mywebsite.com")
}
override fun onBackPressed() {
if (UrlWindow.canGoBack()) {
UrlWindow.goBack()
} else {
super.onBackPressed()
}
}
}
和我的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
欢迎任何帮助!
解决方案
一旦您在OnRequestPermissionResult
回调中获得权限结果,请执行 webview 的初始化。
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
//Do the permission check here
initializeWebView()
}
此外,推荐的步骤是,
- 首先检查权限
- 如果没有获得所需的许可,请请求他们。
OnRequestPermissionResult
在回调中获得权限状态后,执行基于权限的任务。
推荐阅读
- java - 如何使用 dto 正确创建休息方法
- node.js - 无法执行 git commit
- python-3.x - OpenNMT 玩具示例(Python3.9)的问题
- javascript - 如何使用ajax在html中显示mySQL数据
- json - 带有 json 数据的 Swagger PHP multipart/form-data
- authentication - API需要HMAC认证JMeter
- r - LightGBM 的 multi_error 和 multi_logloss 度量参数之间的区别的介绍性解释是什么?
- visual-studio - 如何分发 Visual Studio 模板包?
- python - 如何在对象的内存中保持全局状态?
- python - 如何用 numpy 找到 Wronskian 行列式