简体   繁体   English

Android Studio SDK V23 WebView获取地理位置

[英]android studio sdk v23 webview get geolocation

yet another question regarding this issue. 关于这个问题的另一个问题。 Sorry to be redundant, but I've looked everwhere and still I can't get this to work. 抱歉,我的工作很冗长,但是我到处都看了,但仍然无法正常工作。 My webpage navigator.geolocation function returns this error: The application does not have sufficient geolocation permissions. 我的网页navigator.geolocation函数返回此错误: 该应用程序没有足够的地理位置许可。 It doesn't ever ask the user if they'll allow permission. 它从不询问用户是否允许权限。 Everything works in different browsers on my desktop (chrome, ff, safari, ie 10 +). 一切都可以在桌面上的不同浏览器中运行(chrome,ff,safari,即10 +)。

I'm running an emulator in android studio... the phone type is a nexus 5 api 23 (android 6.0). 我正在android studio中运行模拟器...电话类型是nexus 5 api 23(android 6.0)。

Here's the hodgpodge of code I have for this by now: 这是我现在拥有的代码大杂烩:

//my mainActivity.java file: //我的mainActivity.java文件:

  @Override
   protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    WebSettings mWebSettings = mWebView.getSettings();
    mWebSettings.setJavaScriptEnabled(true);
    String userAgent = mWebView.getSettings().getUserAgentString() ;
    mWebSettings.setUserAgentString(userAgent);

    mWebSettings.setBuiltInZoomControls(true);
    mWebSettings.setAppCacheEnabled(true);
    mWebSettings.setDatabaseEnabled(true);
    mWebSettings.setDomStorageEnabled(true);
    mWebSettings.setAllowFileAccess(true);
    mWebSettings.setAllowContentAccess(true);
    mWebSettings.setGeolocationEnabled(true);
    mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

    mWebView.clearCache(true);
    mWebView.clearHistory();
    mWebView.clearView();
    mWebView.loadUrl("https://mywebsite.com");


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

etc...

//my android manifest file: //我的android清单文件:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"></uses-permission>
<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_WIFI_STATE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    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>

I'm stuck stuck stuck. 我被困住了。 Starting to wonder if this is even possible... how to people get this to work?!?!?!? 开始怀疑这是否有可能……人们如何使它起作用?!?!?!?

Assuming you use AppCompatActivity, not plain activity, this does the trick: 假设您使用AppCompatActivity,而不是简单的活动,那么就可以做到这一点:

@Override
   protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//your code
        ActivityCompat.requestPermissions(getActivity(), new String[]{
                android.Manifest.permission.ACCESS_COARSE_LOCATION,
                android.Manifest.permission.ACCESS_FINE_LOCATION
        }, 0);
//your code
}

Starting from Android 6, API level 23, permission handling has changed. 从Android 6,API级别23开始,权限处理已更改。 You should ask permission for critical functionalities (like location) from user explicitly in runtime. 您应该在运行时明确要求用户许可关键功能(例如位置)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM