我一直在开发一个网站,并决定将其 Package 成一个应用程序,所以我使用Android Studio(Kotlin而不是java).我是非常新的,到目前为止,能够启动应用程序与我的网站,但无法从用户的位置,权限不会弹出.
通常浏览器会请求权限,但应用程序不会。我做了很多搜索,试图找到解决方案,最接近解决方案的是这个https://developer.android.com/training/location/permissions,但我非常新鲜,所有这些在我看来非常混乱,我试着粘贴代码,发现我需要为位置服务创建一些类,所以这将我带到https://thakkarkomal009.medium.com/update-location-in-background-using-foreground-service-android-7aee9de1a6d6链接,教程是我还是不太清楚。那个家伙让我创建类,我不知道在哪里创建类,android studio中的所有这些目录都让我很困惑。他也有一个指向他项目的链接,我就是看不懂所有这些文件。我在想,在MainActivity的Kotlin中,我只需要编写几行代码就可以获得用户对webview应用程序的位置权限,而不必通过这一切。
我的主活动.kt如下所示
package com.example.hav
import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myWeb = findViewById<WebView>(R.id.myWebView)
myWeb.webViewClient= WebViewClient()
myWeb.apply{
loadUrl("linktomywebsite.com")
settings.javaScriptEnabled = true
settings.setGeolocationEnabled(true)
}
}
}
我的AndroidManifest.xml看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hav">
<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" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<application
android:allowBackup="true"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Hav">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="dontknowwhattoputheresomeclass?"
android:foregroundServiceType="location"
android:exported="false" />
</application>
</manifest>
我真的希望有一个更容易的解决这个问题,帮助noob解决它,请如果你有同样的问题之前
2条答案
按热度按时间rjee0c151#
您必须使用WebChromeClient()作为Webview客户端。并覆盖onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback回调)方法。如果用户尚未授予权限,则请求运行时权限。并调用
tyky79it2#
您必须请求用户手动给予位置权限。有关详细信息,请查看官方文档请求权限。
从文档中我推断请求权限代码应该类似于下面的代码。
检查是否授予权限,否则使用
requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)
请求。